Average Handle Time is the most dangerous metric in your call center.
Not the least useful. Not the most overrated. The most dangerous. Because unlike vanity metrics that just waste your time, AHT actively drives bad decisions. Managers track it, set reduction targets, tie agent bonuses to it — and in doing so, systematically destroy the things that actually matter: first-call resolution, customer satisfaction, and agent retention.
I've seen this play out the same way in dozens of Asterisk-based call centers. A new VP walks in, looks at the dashboard, sees AHT at 8 minutes, and declares: "We need to get this under 5." Three months later, FCR has dropped 15%, repeat calls are up 30%, and two senior agents have quit. But hey — AHT is 4:47. Mission accomplished.
My take: AHT shouldn't be your primary KPI. It shouldn't even be in your top 3. If you only track five call center KPIs, AHT should be the one you watch with the most suspicion.
Here are three specific ways Average Handle Time lies to you — and what to measure instead.
What AHT Actually Measures (And Doesn't)
The formula is straightforward:
AHT = (Talk Time + Hold Time + After-Call Work) ÷ Number of Calls
Industry benchmarks hover around 6–8 minutes across all call types. But "all call types" is the key problem. A 6-minute average could mean wildly different things depending on what's underneath it.
AHT Benchmarks by Call Type
| Call Type | Typical AHT | Acceptable Range |
|---|---|---|
| Account balance / simple inquiry | 1–3 min | Up to 4 min |
| Order status / tracking | 2–4 min | Up to 5 min |
| Sales inbound | 4–6 min | Up to 8 min |
| Standard support | 5–8 min | Up to 10 min |
| Technical troubleshooting | 8–15 min | Up to 20 min |
| Billing dispute / escalation | 10–20 min | Context-dependent |
When your dashboard shows "AHT: 6 min" — which of these call types is it averaging together? That single number tells you almost nothing.
How AHT Is Calculated from Asterisk queue_log
If you're running Asterisk, AHT comes from queue_log events. Here's how the raw data breaks down:
-- AHT calculation from Asterisk queue_log
SELECT
DATE(time) AS day,
queuename,
COUNT(*) AS calls,
ROUND(AVG(data2::int), 0) AS avg_talk_sec,
ROUND(AVG(data1::int), 0) AS avg_hold_sec,
ROUND(AVG(data2::int + data1::int), 0) AS aht_seconds
FROM queue_log
WHERE event IN ('COMPLETEAGENT', 'COMPLETECALLER')
AND time >= NOW() - INTERVAL '7 days'
GROUP BY DATE(time), queuename
ORDER BY day, queuename;In queue_log, data1 is hold time (wait in queue before answer), data2 is talk time, and data3 is the agent's position. Note that after-call work (wrapup) isn't tracked as a separate field — it's the gap between one COMPLETECALLER/COMPLETEAGENT event and the next CONNECT. Most reporting tools either ignore ACW entirely or approximate it from wrapuptime settings.
That's lie number zero: Most AHT calculations from Asterisk data are already incomplete because they omit after-call work.
Lie #1: Short AHT ≠ Resolved Problems
An agent closes a call in 3 minutes. Dashboard looks great. But the customer calls back an hour later because the issue wasn't actually resolved. Then again the next day.
Three calls × 3 minutes = 9 minutes of real handle time on a single issue. But AHT reports each call separately — 3 minutes, 3 minutes, 3 minutes. On paper, this agent is your best performer.
This is why I always track AHT together with First Call Resolution. An 8-minute call that solves the problem permanently is worth more than three 3-minute calls that don't.
The Repeat Contact Tax
Here's a query that reveals the real cost of "fast" handling:
-- Find callers who called back within 24 hours (repeat contacts)
WITH calls AS (
SELECT
src AS caller,
calldate,
duration,
LEAD(calldate) OVER (PARTITION BY src ORDER BY calldate) AS next_call,
LEAD(duration) OVER (PARTITION BY src ORDER BY calldate) AS next_duration
FROM cdr
WHERE disposition = 'ANSWERED'
AND dcontext LIKE 'queue%'
AND calldate >= NOW() - INTERVAL '30 days'
)
SELECT
COUNT(*) AS total_calls,
COUNT(CASE WHEN next_call IS NOT NULL
AND next_call - calldate < INTERVAL '24 hours' THEN 1 END) AS repeat_within_24h,
ROUND(100.0 * COUNT(CASE WHEN next_call IS NOT NULL
AND next_call - calldate < INTERVAL '24 hours' THEN 1 END)
/ NULLIF(COUNT(*), 0), 1) AS repeat_pct,
ROUND(AVG(duration + COALESCE(
CASE WHEN next_call - calldate < INTERVAL '24 hours' THEN next_duration END, 0
)), 0) AS true_handle_time_sec
FROM calls;If your repeat contact rate is above 20%, your "real" AHT is 40–60% higher than what your dashboard shows. The 5 KPIs article covers how to correlate these properly.
My take: Every call center I've audited that obsesses over low AHT has a repeat contact rate above 25%. Every single one. The correlation is almost perfect — push AHT down, repeat calls go up, and your total cost per resolution actually increases.
Lie #2: Averages Hide Extreme Distributions
An AHT of 6 minutes could mean two very different things:
- —Scenario A: Every call lasts 5–7 minutes. Consistent, predictable.
- —Scenario B: 60% of calls last 2 minutes (simple lookups), 30% last 8 minutes (standard support), 10% last 20 minutes (escalations). Average: ~6 minutes.
These two scenarios require completely different management approaches. But AHT shows the same number for both.
When you pressure agents in Scenario B to hit a 5-minute target, the simple calls can't get any shorter — they're already 2 minutes. So agents start rushing the complex calls, which is exactly where quality matters most.
See the Distribution, Not Just the Average
-- AHT distribution analysis (percentiles)
SELECT
queuename,
COUNT(*) AS total_calls,
ROUND(AVG(data2::int), 0) AS mean_aht,
ROUND(PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY data2::int), 0) AS median_aht,
ROUND(PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY data2::int), 0) AS p90_aht,
ROUND(PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY data2::int), 0) AS p95_aht,
ROUND(STDDEV(data2::int), 0) AS std_dev
FROM queue_log
WHERE event IN ('COMPLETEAGENT', 'COMPLETECALLER')
AND time >= NOW() - INTERVAL '7 days'
GROUP BY queuename;If the standard deviation is larger than the mean, your average is meaningless. You're looking at a bimodal (or multimodal) distribution that needs to be split by call type or category.
Real-world example: One Asterisk call center I analyzed had an AHT of 5.5 minutes. Looked healthy. The percentile breakdown: P50 was 2:40, P90 was 12:30, P95 was 22 minutes. The "average" call literally didn't exist — no calls were actually 5.5 minutes long. Most were either very short or very long.
What to do instead: Track AHT by queue. In Asterisk, this means separate queues in queues.conf for different call types:
; queues.conf — separate queues for meaningful AHT tracking
[sales-inbound]
strategy = rrmemory
wrapuptime = 15
servicelevel = 20
[support-basic]
strategy = fewestcalls
wrapuptime = 30
servicelevel = 20
[support-technical]
strategy = leastrecent
wrapuptime = 60 ; complex issues need documentation time
servicelevel = 30 ; longer SLA threshold — that's OK
[escalation]
strategy = linear
wrapuptime = 90 ; full notes for handoff
servicelevel = 60With separate queues, each AHT number actually means something. A 12-minute AHT in support-technical is perfectly healthy. A 12-minute AHT in sales-inbound is a problem. Your supervisor dashboard should show per-queue AHT, not a blended number.
Lie #3: AHT Punishes Your Best Agents
Here's the paradox every call center manager eventually discovers: your best agents often have the highest AHT.
Why? Because they actually solve problems. They don't rush customers off the phone. They ask clarifying questions to understand the real issue. They fill out tickets correctly the first time so the next agent doesn't have to redo the work. They de-escalate frustrated callers — which takes time but prevents churn.
Meanwhile, your "fastest" agents with the lowest AHT are often:
- —Transferring calls instead of resolving them
- —Giving scripted answers that don't address the actual question
- —Closing tickets without proper documentation
- —Rushing through after-call work, creating data quality problems
When you rank agents by AHT and reward the fastest ones, you're literally incentivizing the wrong behavior.
Tired of guessing what's happening in your queues?
Astervis gives you 30+ real-time charts, operator KPIs, and CRM integration for your Asterisk PBX. Self-hosted. Install in 5 minutes. From $119/mo flat — unlimited operators.
Prove It With Data
Run this query to see the correlation between agent AHT and quality:
-- Agent AHT vs repeat contact rate
WITH agent_calls AS (
SELECT
ql.agent,
c.src AS caller,
c.calldate,
c.duration AS talk_sec,
LEAD(c.calldate) OVER (PARTITION BY c.src ORDER BY c.calldate) AS next_call
FROM cdr c
JOIN queue_log ql ON ql.callid = c.uniqueid
WHERE c.disposition = 'ANSWERED'
AND ql.event = 'CONNECT'
AND c.calldate >= NOW() - INTERVAL '30 days'
)
SELECT
agent,
COUNT(*) AS total_calls,
ROUND(AVG(talk_sec), 0) AS avg_talk_sec,
ROUND(100.0 * COUNT(CASE WHEN next_call IS NOT NULL
AND next_call - calldate < INTERVAL '7 days' THEN 1 END)
/ NULLIF(COUNT(*), 0), 1) AS repeat_pct
FROM agent_calls
GROUP BY agent
HAVING COUNT(*) >= 50
ORDER BY avg_talk_sec;In almost every data set I've analyzed, the agents with the lowest AHT have the highest repeat contact rate. The "slow" agents who take 8 minutes per call have repeat rates of 10–15%. The "fast" agents at 3 minutes have repeat rates of 30–40%.
My take: If you're using operator performance tracking, weight FCR and CSAT at least 3x higher than AHT. Better yet, create a composite score that rewards resolution quality. This is also how you prevent agent burnout — nothing burns people out faster than being punished for doing their job well.
The Real Cost of AHT Obsession
Let's put a dollar number on this. Say you have a 50-agent call center handling 800 calls per day.
Scenario: You push AHT from 6 min to 4 min
- —Agents rush → repeat contact rate rises from 15% to 30%
- —120 calls/day become 240 repeat calls/day
- —120 extra calls × 4 min = 480 extra agent-minutes per day
- —That's 8 extra agent-hours daily — effectively hiring a full-time agent
- —Cost: ~$3,000/month for one FTE agent
- —Plus the customer satisfaction damage, which is harder to quantify but very real
The ironic result: You reduced AHT by 2 minutes per call to "save time," but created 8 hours of extra work per day. You didn't save anything — you just shifted costs from visible (AHT) to invisible (repeat contacts).
The Right Way to Use AHT
I'm not saying abandon AHT entirely. It's useful as a diagnostic tool, not a target metric. Here's how:
1. Track AHT by Queue, Not Overall
Different call types have legitimately different handle times. A blended number across all queues is noise. Per-queue AHT tells you something.
2. Watch for Sudden Changes, Not Absolute Values
AHT jumping from 6 to 9 minutes overnight signals something happened — a system outage, a product issue flooding support, a new agent without training. That's a useful signal. Chasing an AHT target of "under 5 minutes" is not.
3. Correlate with FCR and CSAT
AHT going up while FCR improves? That's good — agents are spending more time but resolving issues. AHT going up while FCR stays flat? That's a training or tooling problem.
| AHT Trend | FCR Trend | What It Means | Action |
|---|---|---|---|
| ↑ Rising | ↑ Improving | Agents resolving more thoroughly | Celebrate — this is good |
| ↑ Rising | → Flat | Tooling or process problem | Check CRM, knowledge base speed |
| ↑ Rising | ↓ Dropping | Systemic issue | Urgent — investigate immediately |
| ↓ Dropping | ↑ Improving | Genuine efficiency gain | Rare, but real — keep going |
| ↓ Dropping | ↓ Dropping | Agents rushing | Stop pushing AHT reduction |
4. Use Wrapup Time Wisely
The wrapuptime setting in Asterisk's queues.conf directly impacts AHT — and gets it wrong in a specific way. Setting wrapuptime = 0 doesn't eliminate after-call work. It just makes agents perform ACW while the next caller listens to hold music.
; Don't do this
[support]
wrapuptime = 0 ; Agents get next call immediately
; Result: they put callers on hold to finish notes
; Do this instead
[support]
wrapuptime = 30 ; 30 seconds to breathe and document
; Result: clean handoff, accurate recordsFor complex queues, consider 45–90 seconds. Yes, it increases AHT. But it improves data quality, reduces agent stress, and gives your real-time monitoring dashboard accurate data to work with.
Stop Chasing the Wrong Number
AHT is a thermometer, not a thermostat. It tells you something about temperature, but turning it down doesn't cool the room.
Track these instead:
- —First Call Resolution — the single best predictor of customer loyalty
- —Repeat Contact Rate — the cost that AHT hides
- —Abandon Rate by wait bucket — not all abandons are equal
- —Agent Occupancy — the burnout early-warning system
When you shift from "how fast do agents close calls" to "how well do agents resolve problems," everything changes. AHT might go up. Costs will go down. Customers will stay.
See AHT in Context
Astervis shows Average Handle Time the way it should be shown: by queue, by agent, correlated with FCR and resolution quality. Per-queue breakdowns, percentile distributions, trend analysis — not just a single misleading number on a dashboard.
30+ charts. Real-time data. One-command install on any Asterisk, FreePBX, or VitalPBX system.
Start your free 14-day trial →
Related reading:
- —5 Call Center KPIs That Actually Drive Revenue — the metrics that matter more than AHT
- —First Call Resolution: Why Your 70% Target Is Wrong — the metric AHT should always be paired with
- —Agent Burnout: Why Your Monitoring Drives People Out — what happens when you optimize for speed over quality
- —Building a KPI Dashboard with Asterisk — how to set up proper multi-metric tracking
Stop guessing. Start monitoring.
See your Asterisk call center's real performance — queue wait times, agent activity, trunk usage, and 30+ charts. Self-hosted on your server. Install in 5 minutes. No credit card required.
From $119/mo flat. Unlimited operators. 14-day free trial.

