ConceptAdvancedQuality, Cost & Token Economics / Latency budgets and UX tradeoffs / #14

Describe how parallelizing tool calls affects an agent's latency profile.

Cargrave Systems built Groundwire to work an incident the way a good on-call engineer already does: pull the logs, check the metrics, search the runbook, and see what shipped recently, before anyone has to go looking themselves. The model doing the reasoning was never the slow part. The slow part was Groundwire asking each tool one question, waiting for the answer, then asking the next, the exact habit a careful engineer falls into by hand and a program never has to copy.

The direct answer
Fire every tool call that does not depend on another call's result at the same time, and only chain the ones that genuinely need each other's output. Running Groundwire's four incident checks one after another costs about 2,800 milliseconds; firing them together costs about 1,300, because the total stops being the sum of all four and becomes whichever single call is slowest, plus a small cost to join the answers back into one. That is roughly a two times speed-up, and it only holds as long as the tool gateway's concurrency limit is not crossed.
Do this, in order
  1. Fire every tool call that does not depend on another call's output, at the same time.Why: this is the whole trick, the parallel total is bounded by the slowest call, not the sum of all of them.
  2. Chain only the calls with a real dependency, like needing the log's error code before searching the runbook.Why: forcing a dependent call into the same wave buys a fast wrong answer, not a fast right one.
  3. Give every fanned-out call its own timeout, and let the agent answer with whatever came back.Why: a join that waits forever on one stuck call throws away every millisecond the fan-out just saved.
  4. Watch the join time in production against the ceiling you expect, the slowest call plus overhead, not just the average.Why: a rate limit on the tool gateway can quietly queue calls with no error anywhere, and the parallel time creeps back toward the sequential number.
  5. Know the tool gateway's concurrency cap before adding a fifth or sixth tool.Why: adding a tool inside the cap is nearly free; adding one that crosses it brings serial time straight back for that call.
  6. Say plainly which source is missing if a call times out, instead of answering as if all four came back.Why: a confident answer built on three of four sources is a guess wearing a diagnosis's clothes.

How to answer this, stage by stage

Nobody is grading whether you know the word "parallel." They're grading whether you can show the actual arithmetic behind it, out loud, including the one case where firing things together is the wrong move.

1
Scope it to one system, and name the equation before naming a number
Say it like this
"Let's ground this in one system. Groundwire is an incident-response agent built by Cargrave Systems. It gathers context for an on-call engineer by calling four tools: log search, a metrics query, a runbook lookup, and a deploy history check. Ashwin Everleigh owns its latency budget. Before I give you a number, here's the actual equation. Called one after another, the total is the sum of all four. Fired at once, the total is set by whichever one is slowest, plus a small cost to join the answers back into one."
Why this works
Naming the equation before a number stops "parallel is faster" from being a vague claim instead of arithmetic anyone can check.
2
Say what each call actually costs, and where the number comes from
Say it like this
"Log search runs 900 to 1,600 milliseconds, because it scans a rolling window of logs and the range depends on how long the incident's been going. The metrics query, 500 to 900. The runbook lookup, 350 to 650. The deploy history check, 300 to 550. Best estimate for each: 1,200, 700, 500, and 400."
Why this works
A number nobody can trace to a real call is a guess with a stopwatch taped to it.
3
Add them up two ways, chained and fired together
Say it like this
"Chained, one after another, that's 1,200 plus 700 plus 500 plus 400, about 2,800 milliseconds, with a real range of 2,050 to 3,700 depending on how slow each call runs that day. Fired together, the total isn't the sum, it's the slowest one, the log search at 1,200, plus about 100 milliseconds to gather the four answers back into one. Call it 1,300, with a range of about 960 to 1,750."
Why this works
Saying both totals side by side, out loud, proves you understand why parallel wins, not just that it does.
4
Name the one call that cannot be fired blind
Say it like this
"Not every call here is independent. Sometimes Groundwire needs the exact error code the logs turn up before it can search the runbook for a matching past incident, because that code is the search term. So the runbook call either fires in the same wave, if the error is already a known, tagged alert, or it waits for the log search to return first. Metrics and deploy history never depend on anything, so those always fire immediately."
Why this works
An estimator who parallelizes everything blindly, including a call that needs another call's answer first, gets a fast wrong answer instead of a slow right one.
5
Sanity check the number against something real
Say it like this
"1,300 milliseconds already beats a person checking four systems by hand, that used to run about six minutes end to end. So the real win from parallel isn't beating a human, sequential already does that comfortably. It's the gap between 2,800 and 1,300 during the ten seconds everyone in the incident channel is staring at the screen, waiting for the first line of context, and that's exactly when an extra 1.5 seconds gets noticed."
Why this works
This is the step most answers skip, checking a number against a real comparison instead of just declaring it good.
6
Name the ceiling, and the trade-off you're accepting to protect it
Say it like this
"This only holds under Groundwire's tool gateway concurrency cap of five calls at once. Add a fifth tool inside that cap and the parallel total barely moves, still set by the 1,200 millisecond log search. Cross the cap and one call has to wait its turn, and the parallel time creeps back up. To protect the budget, every fanned-out call gets a two second timeout, so a slow, thorough 30-day log scan sometimes gets cut off early, in exchange for an answer that lands in time to matter."
Why this works
Naming the trade-off, instead of pretending speed and completeness are both free, is what makes this a real decision.
7
Close on the one line
Say it like this
"So: fire every call that doesn't depend on another call's answer, chain only the ones that genuinely do, and expect the total to land near the slowest call, not near the sum of all of them, about 1,300 milliseconds here instead of 2,800."
Why this works
Ending on the actual number, in one breath, is what makes this sound rehearsed instead of like a story that trailed off.

Let's learn

Groundwire is an agent that gathers the first useful facts about a live incident, so a person doesn't have to go looking themselves.

Before Groundwire, an on-call engineer at Cargrave Systems opened four different tools by hand for every page: the log search, the metrics dashboard, the runbook wiki, and the deploy history. That took about six minutes on an average incident, most of it spent switching tabs and waiting for each one to load, before anyone had actually started fixing anything.

Hand sketched vertical list titled Before the fan out, four tabs, one at a time. Four numbered rows. One, open the log search, wait for it to return. Two, open the metrics dashboard, wait again. Three, search the runbook wiki, wait again. Four, check the deploy history, wait again. Each row has a small hand drawn icon beside it.
This is what a page used to cost an on-call engineer before Groundwire existed, four tools, opened and waited on one at a time.
Knowledge spark: what is a tool call? An agent asking another system a question and waiting for the answer, the same way a person clicks a button and waits for a page to load. Groundwire makes four of these every time it's paged.

Groundwire's first version called all four tools the same way a careful engineer would, one at a time. It replied in about 2,800 milliseconds, still miles faster than six minutes by hand, so nobody thought twice about it.

The turn: The extra milliseconds weren't really the problem on their own. The problem is what happens during a loud, high pressure incident: the on-call engineer, staring at a spinner during the loudest ten seconds of the outage, opens one of those same four tools themselves anyway, just to feel like they're doing something, duplicating the exact work Groundwire is already halfway through.

We didn't lose 1.5 seconds off Groundwire's reply. We lost the ten seconds where the engineer trusted it enough to just wait.
The build-up: Groundwire's total, chained versus fired together
3000ms 2000ms 1000ms 0 Chained 2,800 Fired together 1,300
Log search (the ceiling)Metrics queryRunbook lookupDeploy check / join overhead
Chained, all four stack up to about 2,800 milliseconds. Fired together, only the slowest call, the log search, plus a thin sliver of joining time counts toward the total: about 1,300.
The choice that mattered Groundwire's first version called its four tools the exact way its own engineers work an incident by hand: log, then metrics, then runbook, then deploy history, one at a time, waiting for each answer before asking the next. It shipped in a week, it worked, and it read like the obviously careful way to do it, because it copied a person who genuinely is careful.
Hand sketched left to right flow diagram titled Groundwire's first design, one tool call then the next. Five boxes connected by arrows, in order, log search, metrics query, runbook lookup, deploy check, answer. The final box is outlined in amber.
The old shape: five boxes in a row, each one waiting its turn behind the one before it.

At its worst, that extra 1.5 seconds isn't just slow. During a real outage, in the ten seconds after the page fires, it's the gap that convinces someone to stop trusting the agent and start doing its job over again by hand, at the exact moment their attention is worth the most.

What I'd leave alone: the one pairing where log search and runbook lookup genuinely depend on each other stays chained, on purpose. Forcing that pair into the same wave doesn't make Groundwire faster, it makes it search the runbook before it knows what to search for, which just means a wrong answer arrives at the same fast speed.

The lesson: an agent doesn't get graded on how many tools it can call. It gets graded on whether the wait between the page and the first line of context feels like the agent is already working, or like nothing happened yet. Chain what truly depends on itself. Fire everything else at once. The difference is the whole 1,500 milliseconds.

Now here is the same thing as a story

Read the long version below when you want to feel why a pipeline that never crashed, never errored, and always finished under three seconds still lost an engineer's trust in the middle of an outage.

Ashwin Everleigh had run on-call rotations for six years before he built Groundwire's first version, and when it came time to wire up its four tool calls, he did the obviously careful thing. He made it check the logs, then the metrics, then the runbook, then the deploy history, one after another, exactly the order he'd worked an incident himself for years.

For the first two months, on the small, quiet services, that order barely showed up on anyone's radar. A page would fire, Groundwire would reply in under three seconds, and the engineer on call would already be reading real context before they'd even opened their laptop fully. It felt, genuinely, faster than anything Cargrave Systems had shipped before.

Then Groundwire got wired into the payments service, the one with a page almost every week, and the pages got louder. Three seconds started to feel different when four other engineers were already typing in the incident channel, asking if anyone had eyes on it yet.

Nobody filed a bug. There wasn't one. Groundwire never once failed to answer.

What changed, slowly, was who reached for the tools first. On a quiet Tuesday, the engineer on call would wait the full three seconds without noticing. On a loud payments incident, more and more of them started opening the metrics dashboard themselves the second the page landed, not because Groundwire was wrong, but because three seconds of silence during a loud incident felt like nothing was happening.

It surfaced at a retro, three weeks later, when Yumiko Holdrick, who'd taken four of those payments pages herself that month, said something offhand while the team reviewed the timeline. Ashwin had pulled up the dashboard and pointed at the average reply time, which read a healthy 2.9 seconds. Yumiko asked why it still felt slow if the number said it wasn't. Ashwin didn't have an answer ready.

Hand sketched comparison scene titled The question at the retro. Two small figures, one labeled Ashwin, pointing at a dashboard, says the numbers look fine. One labeled Yumiko, asks why it still feels slow during a live page. A large VS sits between them.
The trigger was small: one honest question at a retro, not a single failed page.

So he watched a real incident live the next time payments paged. What he saw: while Groundwire quietly worked through logs, then metrics, then the runbook, then deploy history, the on-call engineer had already opened the metrics dashboard themselves by the second step, running the exact same query Groundwire was about to run one call later. Two people, one system, doing the same lookup twice, because the wait felt long enough to fill.

Ashwin's first instinct was the sensible one: make the individual calls faster, maybe cache the metrics query. Yumiko talked him out of it fast. A faster metrics call barely touches the total, because the total was never really about any one call. It was about all four of them queued up behind each other when three of the four didn't need to be.

The decision that opened the door went back to Groundwire's very first sprint, when it had exactly one tool and calling things "in order" wasn't a decision at all, it was the only shape there was. Nobody in that sprint planning meeting decided a one-tool habit should still be running a four-tool agent a year later, on a payments incident, at 2am. It just kept working, the way a choice that never once causes an error stops looking like a choice anyone made.

Run that same retro again, with the fan-out design in place from the start. Yumiko never says anything offhand, because there's nothing to notice: the reply lands in about 1.3 seconds, inside the window where silence still reads as "still working," and nobody on the payments incident opens a second tab to check something Groundwire is already checking.

One design let four questions line up and wait their turn. The other lets the three that don't depend on anything go at once, and only makes the fourth wait when it genuinely has to. Same four tools. The difference is whether a person watching the wait ever reaches for a keyboard.

What Ashwin would tell himself, back in that first sprint: building it one tool at a time wasn't wrong, it was the only shape a one-tool agent could have. It was never given a date to be asked whether it still made sense once a second tool showed up, then a third, then a fourth.

BOUND, run against Groundwire's real incident pipeline

Not a story question wearing a framework's clothes. This is an estimation problem, and BOUND is what keeps "parallel is faster" from being a slogan instead of arithmetic you could defend.

BBreak it down. What's the actual equation?
Groundwire's context-gather step is two equations, not one. Chained: total equals call one plus call two plus call three plus call four. Fired together: total equals whichever call is slowest, plus the cost of joining the answers back into one.
Say both equations before naming a number, or "parallel is faster" stays a slogan instead of arithmetic.
OOwn the numbers. Where did each one come from?
Log search: 900 to 1,600 milliseconds, because the query window scales with how long the incident's been running. Metrics query: 500 to 900. Runbook lookup: 350 to 650, and it depends on the log search's own output whenever the error code isn't already a known, tagged alert. Deploy history check: 300 to 550. Join overhead once all four return: 80 to 150.
This is also where the rejected alternative sits, see below: interleaved, one-at-a-time calling for every tool, kept as the default even after three of the four stopped needing it.
Hand sketched diagram titled Fired together, joined once. A central box labeled Dispatch with four lines radiating out to small labeled boxes, logs, metrics, runbook, deploy check, all connected to the same center.
The new shape: one dispatch, four calls going out at once, one join bringing the answers back together.
UUse a range, not one number.
Chained, the total runs 2,050 to 3,700 milliseconds, best estimate near 2,800. Fired together, wherever the runbook call doesn't have to wait on the log search, the total runs 960 to 1,750, best estimate near 1,300.
A range this wide, next to a six-minute manual check, is exactly why the real argument for parallel isn't speed against a human, it's speed against a live incident channel's patience.
Hand sketched number line titled Groundwire's range, low to high. Four points along a wavy pencil line. Parallel best case at about 960 milliseconds. Parallel worst case at about 1750 milliseconds. Sequential best case, circled in green, at about 2050 milliseconds. Sequential worst case at about 3700 milliseconds.
Even sequential's best case sits above parallel's worst case. The two ranges barely touch.
NNail the sanity check. Does the number survive being compared to something real?
1,300 milliseconds already beats a person checking four systems by hand, which used to run about six minutes. So the real argument for parallel isn't that it beats a human, sequential already did that comfortably. It's that 2,800 milliseconds sits close enough to a real "is this thing stuck" feeling during a loud incident that an engineer starts checking it themselves, while 1,300 sits safely inside the window where silence still reads as working.
The hardest step, and the one most answers skip. A number that looks fast on its own can still be sitting in the wrong comparison.
DDirection. Which assumption would move the answer most?
Not which model reasons about the results, and not the speed of any one call on its own. Whether the fan-out crosses the tool gateway's concurrency cap of five calls at once swings the answer most. Under the cap, adding a tool is nearly free, the total stays near the slowest call. Cross it, and one call queues behind another, and the parallel total starts climbing the same way the chained total always did.
Naming the assumption you trust least, out loud, is what a good estimator does that a bad one skips.
What moves Groundwire's total as more tools get added
3000ms 2000ms 1000ms concurrency cap: 5 calls queued 1 2 3 4 5 6 tool calls in play
Chained (sequential)Fired together (parallel)
Chained time climbs with every tool added. Parallel time stays flat, held down near the slowest call, right up until a sixth tool crosses the gateway's cap of five at once and has to queue.

Three things worth stating directly, since this is where the real judgment sits. The alternative Ashwin's first design used was interleaved, one-at-a-time calling: decide, call a tool, read the result, decide the next call, the same shape a careful person uses by hand. It got dropped for three of the four calls once the retro showed it added the same 1.5 second tax as pure sequential, even though metrics, runbook, and deploy history never needed each other's answers in the first place; the interleaved pattern only stayed for the one real dependency, log search into runbook lookup. The AI-specific failure worth naming by name is silent degradation: when the fan-out crosses the concurrency cap, calls don't error, they just quietly queue, and the parallel time creeps back toward the sequential number with nothing in the logs to say why. The guardrail is watching the p95 join time against the expected ceiling, the slowest call plus overhead, in production, and treating a rising gap between the two as the tell that throttling is happening invisibly. And the trade-off Groundwire accepts to protect its budget: every fanned-out call gets a two second timeout, so a slow, thorough 30-day log scan sometimes gets cut short in exchange for an answer that lands while it still matters, and Groundwire says plainly which source it's missing rather than answering as if it had all four.

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

Same five letters, an insurance claims agent instead of an incident responder, and this time the lever isn't a concurrency cap, it's that one call is so much bigger than the other two that firing them together barely helps.

Claimrunner is a claims-intake agent Corribrook Mutual runs on every new auto claim. The moment a claim comes in, it fires three calls: a policy lookup, a fraud-risk score, and a damage estimate built by running a vision model over the uploaded photos. Aditi Solmundsen owns its latency budget.

The decision Aditi would take back Claimrunner's first version ran the same three calls chained, copying the order a claims adjuster used to work through by hand: check the policy first, then run the fraud check, then look at the photos last, since photos took the longest and adjusters liked to save the slow part for when they had coffee in hand.

Firing all three together instead of chaining them still helps, the total drops from about 2,650 milliseconds to about 1,900. But that's a much smaller win than Groundwire's, because one call, the damage estimate, already eats 1,200 to 2,500 milliseconds on its own, while the policy lookup and fraud score barely register at 200 to 400 and 400 to 700. Parallel can only ever get Claimrunner down to whatever that one big call costs. The real lever here isn't firing things together, it's shrinking the damage estimate itself, a smaller image size before it hits the vision model, or a fast, rougher first pass with a slower, sharper one running behind it.

Hand sketched quadrant diagram titled Why one call dominates Claimrunner's total. X axis, how long the call takes alone, fast to slow. Y axis, how much it swings call to call, steady to unpredictable. Three dots, policy lookup and fraud risk score sit close together near fast and steady. Damage photo estimate sits alone, far toward slow and unpredictable.
Two calls sit close together near the fast, steady corner. One sits alone, far off toward slow and unpredictable, and that one call sets the floor no matter how the other two are called.

Same method, different lever: for Groundwire, the lever that moved the estimate was whether the fan-out crossed a concurrency cap. For Claimrunner, there's no cap in play, three calls never gets close to any gateway's limit. The lever here is that the calls aren't close to the same size, so parallel buys back the two smaller ones' time and nothing more.

Swap the trigger and it still runs.
Speed: an interviewer caps you at ninety seconds. Skip straight to it: say which calls are independent, say the total is bounded by the slowest one, then name what actually sets that ceiling.
Cost: there's no time this sprint to both resize photos before the vision model and rebuild the fraud-score call. Resize the photos first, it's the smaller change and the bigger lever anyway.
The model got better, for real: say the vision model doing damage estimates gets meaningfully faster next quarter. That's the one upgrade that actually moves Claimrunner's total, because it's the one call the whole thing is bounded by.

Where people run it wrong.
They copy the order a person used to work through by hand, policy first, then fraud, then photos, without asking whether any of the three actually needs another one's answer.
They celebrate a parallel win that's really just hiding one dominant call, instead of asking whether shrinking that one call would help more than firing things together ever could.
They add a fifth or sixth tool without checking what the gateway allows, and find out about the concurrency cap during a real incident instead of before one.

How to use it live. Ask the real question before quoting a number: "are these calls actually independent, or does one need another's answer first, and if they are independent, which one alone sets the floor on how fast this can ever be?" That question tells you whether parallel is the fix, or just a smaller win hiding a bigger one.

Flashcards (tap any card to flip it)

1 · THE FRAMEWORK
What framework is this, and what's its one job?
Tap to flip
ANSWER
BOUND: show the arithmetic, own the assumptions. Built for estimation questions like a latency budget, not a story about someone's habit.
2 · THE PERSON
Who is this answer about?
Tap to flip
ANSWER
Ashwin Everleigh, who owns Groundwire's latency budget at Cargrave Systems, working alongside Yumiko Holdrick, the teammate who asked why it still felt slow.
3 · THE BLIND SPOT
What did Groundwire's first design never account for?
Tap to flip
ANSWER
That three of its four tool calls never depended on each other at all, so chaining them the way a careful person would taxed every call equally, whether it needed to wait or not.
4 · THE EQUATION
What are Groundwire's two equations, chained and fired together?
Tap to flip
ANSWER
Chained: total equals call one plus call two plus call three plus call four. Fired together: total equals the slowest call, plus a small cost to join the answers back into one.
5 · THE OLD DECISION
What decision would Ashwin take back?
Tap to flip
ANSWER
Calling all four tools one at a time, interleaved like a person checking each system by hand, kept as the default even once three of the four calls had no reason to wait for each other.
6 · THE NUMBER
Fill in the blank: Groundwire's chained total lands near ___ milliseconds. Fired together, the same four calls land near ___.
Tap to flip
ANSWER
About 2,800, and about 1,300. The parallel total is set by the 1,200 millisecond log search plus about 100 milliseconds to join the answers, not by adding all four together.
7 · THE REPLAY
Same retro, new design, what changes?
Tap to flip
ANSWER
With fan-out in place from the start, Groundwire replies in about 1.3 seconds every time, inside the window where silence still reads as working, and nobody on the incident opens a second tab to check something it's already checking.
8 · CROSS-PRODUCT TRANSFER
Section 4 answers this same question again for a different product. Which product, and what's the different lever there?
Tap to flip
ANSWER
Claimrunner, a claims-intake agent Corribrook Mutual runs on auto claims. There the lever isn't a concurrency cap, it's that one call, the photo-based damage estimate, is so much bigger than the other two that parallel can only shrink the total down to that one call's own time.

Check yourself Score: 0 / 0

True or false
1. True or false: firing Groundwire's four tool calls together makes the total four times faster than calling them one after another.
  • True
  • False
Show hint
Look at the U step in the framework recap, the paragraph giving both ranges.
Show answer
False. The parallel total is set by the slowest single call plus a small overhead, about 1,300 milliseconds, not by dividing the chained total by four. The real speed-up here is about two times, not four.
Fill in the blank
2. Groundwire's chained total lands near ___ milliseconds. Fired together, the same four calls land near ___ milliseconds.
Show hint
Look at the B and U steps in the framework recap, right after the equation is broken down.
Show answer
About 2,800 milliseconds, and about 1,300 milliseconds. The chained range runs 2,050 to 3,700; the parallel range runs about 960 to 1,750, bounded by the log search's own 900 to 1,600 millisecond range.
Multiple choice
3. What single factor sets the floor on how fast Groundwire's parallel path can ever be?
  • A. The number of tools it calls
  • B. The slowest of the individual tool calls
  • C. The speed of the model doing the reasoning
  • D. The network bandwidth between services
Show hint
Check the build-up chart in Let's learn and see which segment sets the height of the parallel bar.
Show answer
B. Fired together, the total is the slowest call plus a small join cost, here the 1,200 millisecond log search, not the number of calls or the model's own speed.
Short answer, name the rejected alternative
4. What alternative design did Groundwire use before firing calls together, and why did the team drop it for three of the four calls?
Show hint
Look at the O step in the framework recap, right after the equation.
Show answer
Model answer: Interleaved, one-at-a-time calling: decide, call a tool, read the result, decide the next call, the same shape a careful person uses by hand. It got dropped for the metrics, runbook, and deploy-history calls once the team saw it taxed all three with the same 1.5 second wait, even though none of them needed another call's answer first.
Short answer, apply it yourself
5. Think of an app or assistant you've used that seems to load several things at once, a food delivery app showing your order status, the restaurant's rating, and the delivery time together, for example. Name one place it might be calling several things in parallel, and what would happen to the wait if it called them one at a time instead.
Show hint
Think about whether the different pieces of information could have come from separate lookups.
Show answer
Model answer: A food delivery app likely fires the order status, driver location, and estimated time as three separate calls at once. Called one after another, the screen would sit blank noticeably longer, close to the sum of all three, instead of showing everything the moment the slowest one returns.
Multiple choice
6. Groundwire's tool gateway caps concurrent calls at five per incident. If a sixth tool call, taking 350 milliseconds on its own, gets added, what happens to the parallel total?
  • A. It stays near 1,300 ms, since parallel calls never queue.
  • B. It rises to about 1,650 ms, because the sixth call has to wait its turn behind one of the first five.
  • C. It falls, because more tools give the agent more information to work with.
  • D. It has no effect, since the concurrency cap only applies to chained calls.
Show hint
Look at the line chart in the framework recap, right where it crosses the concurrency cap mark.
Show answer
B. Below the cap, adding a tool barely moves the total. Cross it, and a call has to queue, so the 1,300 millisecond total rises by roughly that queued call's own time, to about 1,650.
Before you close the answer
Why this works
Tests whether you'll treat "run it in parallel" as a slogan or as arithmetic you can defend, and whether you know parallel time is bounded by the slowest call, not divided by the number of calls.
Follow-up traps
"Why not just fire every tool call in parallel, always, no exceptions?" Response: some calls depend on another one's answer, like the runbook search needing the log's error code. Forcing that pair into the same wave gets a fast, wrong answer instead of a slightly slower right one.

"If parallel is strictly better, why does the concurrency cap matter at all?" Response: because "better" assumes unlimited capacity on the other end. Cross the tool gateway's cap of five calls and one queues behind another, and the parallel total starts climbing the same way the chained total always did, silently, with nothing in the logs to explain why.
If pressed
The concurrency cap doesn't just throttle new calls, it changes which call the total is bounded by. Below the cap, the total is set by the slowest of the four. Above it, it's set by whichever call gets queued longest, which can be a fast call that just had bad luck in the queue, not the log search 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