Business

Forecasting the Support Load of a Default-On AI Feature

Antonio Evans9 min read

A three-panel diagram: opt-in cohort with contact rate, a topic-mix pie chart with resolution times, and a projection line crossing an agent-capacity line with a gate label.
Key points

Key points

  1. 1Contact rate is the number of support tickets per 100 active users per week, and it is the single multiplier that turns your opt-in cohort into a default-on forecast.
  2. 2A cohort of at least 500 users observed over four weeks smooths the novelty spike that inflates early opt-in contact rates.
  3. 3Topic mix and average resolution time convert ticket counts into agent-hours, which is the number your capacity plan actually needs.
  4. 4Set a gate at 80% of available agent capacity: above that, delay the default-on rollout or add staff before exposure grows.

Why opt-in numbers mislead you, and how to correct for it

The first trap in forecasting a default-on AI feature is trusting the contact rate you measured while the feature was opt-in. Opt-in users are self-selected: they are curious, patient, and often power users who read the release notes. The population that arrives on default-on day is the opposite, a long tail of people who never asked for the feature and who will file a ticket the moment it does something they did not expect.

Treat the cohort contact rate as a ceiling, not a midpoint. The practical correction is to hold the cohort long enough that novelty fades. A four-week observation window on at least 500 users usually spans the first curious wave, the first confused wave, and the plateau. If your contact rate is still falling in week four, the plateau has not arrived and you should not extrapolate yet. Zendesk's own forecasting guidance requires at least two full cycles of data before it will compute a projection at all, which is a useful floor for your own discipline the Zendesk Explore forecasting recipe.

The definition of contact rate itself is worth pinning down because teams disagree on denominators. Decagon's glossary defines it as support contacts divided by customers or transactions, multiplied by 100, and notes that SaaS teams normally measure contacts per active user per month with best-in-class figures below 2 percent the Decagon contact rate glossary. Converting to a weekly figure keeps the arithmetic small; you can always multiply by four.

One more correction that first-search results skip: not every ticket in your cohort is caused by the AI feature. Before you multiply, tag tickets in your helpdesk with a feature reason code and count only the subset that mentions or implicates the new capability. If you skip this step, you will forecast the entire support org's workload onto one feature and over-staff.

Step one: compute contact rate per 100 active users per week

Do this in your helpdesk export, not in a slide.

  1. Define the cohort precisely: users who had the feature enabled for at least seven continuous days during the window.
  2. Count active users in the cohort per week. Use your product analytics session or event table, not your billing table, because billing counts accounts that never open the product.
  3. Count the feature-attributed tickets created in the same weeks.
  4. Divide tickets by active users, multiply by 100, and average the four weekly values.

A worked example, with round numbers for clarity:

WeekCohort active usersFeature-attributed ticketsContacts per 100 users
1500357.0
2540305.6
3560254.5
4575234.0
Four-week mean5.3

The mean is 5.3 contacts per 100 users per week, but the trend is downward across all four weeks. The decision rule here matters more than the number: if the week-four value is the lowest and still falling, use week four (4.0) as the base case and week one (7.0) as the stress case. If the trend is flat, use the mean. This gives you a range rather than a false point estimate, and the range is what you bring to the staffing conversation.

Do not use a cohort smaller than 500 users. At 200 users, four tickets versus five in a week swings your rate by 0.5 points per 100, which is enough to flip a staffing decision. At 500 or more, a single anomalous ticket moves the rate by 0.2 points or less, and the noise stops dominating the signal.

Step two: multiply by the default-on population

The arithmetic is deliberately trivial: default-on tickets per week equals contacts per 100 users per week, times the default-on active user population, divided by 100.

Take a product with 40,000 weekly active users after default-on. At a base case of 4.0 contacts per 100, you project 1,600 tickets per week. At a stress case of 7.0, you project 2,800. That spread of 1,200 tickets is the entire reason to build a range.

The default-on population is not your whole user base. Two adjustments reduce it:

  • Geography or account tier exclusions. If the rollout excludes regulated regions or enterprise tenants on a separate release track, subtract them. This is also where a feature flag with percentage rollout earns its keep: you can widen in steps of 5, 10, then 50 percent and watch the contact rate at each step rather than trusting the projection blindly the OneUptime percentage rollout guide. The consistent hashing described there keeps each user in the same bucket across requests, which keeps your experiment clean.
  • Engagement decay. A feature that is default-on but ignored generates no tickets. If your cohort used the feature at 30 percent weekly and you expect the default-on population to use it at 15 percent, halve the projected tickets. This is the single most common source of over-forecasting, and it cuts in your favor for once.

A canary stage between opt-in and default-on is the cheapest way to firm up both numbers. Google Cloud's canary documentation describes splitting traffic between an existing and a new version and rolling out to a subset of users before going wide the Google Cloud canary deployment guide. The contact rate measured in that canary is a far better input than any cohort extrapolation.

Step three: break the total into topics

A total ticket count cannot be staffed. Topic mix can. Pull the feature-attributed tickets from your cohort, read a random sample of at least 100, and assign each to a small taxonomy. Five to seven topics is enough; more than that and your shares become unstable.

A realistic mix for a generative AI feature looks like this:

TopicShare of cohort ticketsBase-case weekly tickets at 1,600 total
Output is wrong or hallucinated30%480
Does not know how to trigger the feature25%400
Permissions or data access questions18%288
Performance or latency complaints15%240
Billing or quota questions7%112
Everything else5%80

Two insights hide in this table. First, the largest bucket is often a knowledge problem, not a defect: "does not know how to trigger the feature" at 25 percent is a documentation and onboarding fix, not a hiring need. Cutting that share in half with a better first-run experience removes 200 tickets per week without a single new agent. This is the point the contact rate literature makes about decomposing by intent: an aggregate rate hides which slice is solvable with proactive communication rather than headcount the Decagon contact rate glossary.

Second, hallucination tickets are usually the cheapest per ticket to triage and the most expensive to resolve, because they require reproduction and a knowledge base update. Topic mix only becomes useful when it is combined with resolution time, which is the next step.

Step four: convert topics into agent-hours

Multiply each topic's weekly ticket count by its average resolution time in hours. Use your helpdesk's actual handle time plus after-call work, not a benchmark. If you have no measured figure, run a time study on 30 tickets per topic before you publish a forecast.

TopicWeekly ticketsAvg resolution (hrs)Agent-hours per week
Output is wrong4801.5720
Does not know how to trigger4000.3120
Permissions or data access2882.0576
Performance or latency2400.65156
Billing or quota1120.556
Everything else801.080
Total1,6001,708

Now you have the number your capacity plan needs: 1,708 agent-hours per week at the base case. Multiply by the stress case ratio (7.0 divided by 4.0) and you get roughly 2,990 hours. That range is what you take into the gate.

The general formula, stated once: agent-hours per week equals the sum, over all topics, of topic tickets times topic resolution time. Supportbench makes the same multiplication as the core of its workload estimate, multiplying forecast volume by average handle time, then dividing by agent availability and adjusting for shrinkage such as breaks, training and absence the Supportbench staffing guide. Gorgias notes shrinkage is often far larger than teams assume and puts typical industry figures in ranges that erode available hours well below headcount times forty the Gorgias forecasting framework.

Do the shrinkage arithmetic honestly. One full-time agent is nominally 40 hours per week, but after vacation, sick time, training, meetings and breaks, available hours are commonly 60 to 85 percent of that. At 75 percent availability, one agent offers about 30 productive hours. The base case of 1,708 hours therefore needs roughly 57 agents on the feature alone if this were the only workload they carried. In practice the feature shares agents with everything else, so the useful figure is the incremental hours, which you then compare against slack in the existing team.

Step five: set the gate before you widen

The gate is the governance mechanism. Without a pre-agreed threshold, the default-on date becomes political and support finds out on launch week.

Write the gate down before the widening decision and share it with product, support and finance:

  • Green. Projected agent-hours at the base case are below 60 percent of available feature capacity. Proceed with default-on at the planned date.
  • Amber. Projected hours land between 60 and 80 percent of capacity. Proceed only with a documented mitigation: new knowledge base articles for the top deflectable topic, temporary overtime, or a staged rollout over two weeks.
  • Red. Projected hours exceed 80 percent of available capacity at the base case, or exceed 100 percent at the stress case. Delay the default-on rollout or add staff first. No exceptions.

Use the number, not the narrative. If the base case lands at 1,708 hours against 1,900 available, you are at 90 percent and the gate says red, even if the stress case is comfortable in the conversation. The gate exists precisely to override the optimism that gathers before every launch.

Two things strengthen the gate. First, monitor the actual contact rate weekly during the staged rollout and recompute; if the observed rate exceeds the base case by more than 20 percent for two consecutive weeks, roll back the percentage to the previous step. Second, keep a fallback: a feature that can be disabled by config, not by redeploy, is the only way the rollback clause is credible. GrowthBook's guide to feature flagging AI models makes the case that model IDs, prompts and parameters belong behind flags because they are otherwise invisible to your deployment pipeline the GrowthBook feature flagging guide, a point echoed in Microsoft's own guidance to keep a fallback path during a staged rollout rather than treating the staged configuration as permanent the Microsoft Entra staged rollout documentation.

The budget template

Fill this in once and reuse it every time a feature goes default-on. Copy it into a spreadsheet.

1. COHORT
   users_in_cohort = 500 (min)
   observation_weeks = 4 (min)
   weekly_active_users[w1..w4]
   feature_attributed_tickets[w1..w4]
   contact_rate_wk = tickets / active * 100
   base_case = week4 if declining else mean
   stress_case = week1

2. EXPOSURE
   default_on_wau
   engagement_factor = default_on_usage / cohort_usage
   projected_weekly_base = base_case * default_on_wau / 100 * engagement
   projected_weekly_stress = stress_case * default_on_wau / 100 * engagement

3. TOPICS (sample 100+ tickets)
   topic | share | tickets | avg_res_hrs | hours

4. CAPACITY
   available_agent_hours = agents * 40 * availability
   utilization = projected_hours / available_agent_hours
   gate = green (<60%) | amber (60-80%) | red (>80%)

5. DEFLECTORS
   top_deflectable_topic | share | expected reduction | hours saved

6. DECISION
   date | owner | outcome | review date

Two notes on using it. Run the deflector line before you run the capacity line. If a documentation change plausibly cuts the "does not know how to trigger" bucket by half, subtract those hours from the projection before you decide whether to hire. And review the template after the first staged rollout, because the gap between your projected contact rate and your observed one is the calibration that makes the next forecast credible.

If the manual arithmetic becomes the bottleneck, or you need the feature to call several different models behind one interface without three separate support runbooks, Quanta Inference (https://quantaintelligence.ai/inference) gives you text, image, video, audio and embedding models through a single OpenAI-compatible key, which keeps the number of vendor-specific failure modes you have to staff for down to one.

FAQ

FAQ

How many users do I need in the opt-in cohort before the numbers are usable?

At least 500 users observed for four continuous weeks. Below that, a difference of a couple of tickets per week swings the contact rate enough to change a staffing decision, and the noise overwhelms the signal. If 500 is impossible, publish the forecast as a range only and say so.

Should I use the average contact rate or the last week of the cohort?

It depends on the trend. If the weekly rate is still falling in week four, use week four as the base case and week one as the stress case, because the plateau has not arrived and the average flatters your future. If the weekly rate is flat across the window, the mean is the better input.

What if my helpdesk cannot tag tickets by feature?

Add a reason code before you start the cohort, or classify a sample of at least 100 tickets by hand. Without attribution you will forecast the team's entire workload onto one feature and over-staff. The hand-classified sample also gives you the topic mix you need in step three, so the effort pays twice.

How do I handle a topic that I expect the rollout itself to create?

Treat it as a new topic with an assumed share and resolution time, and label the assumption visibly in your forecast. The most common example is "does not know how to trigger the feature," which often carries a large share at default-on because the opt-in cohort already knew. Better onboarding copy is the cheapest fix, and you should model it before you model a hire.

Why 80 percent of capacity rather than a different threshold?

Eighty percent leaves roughly a fifth of capacity for the tickets your forecast does not anticipate, including multi-ticket incidents, the tail topics in your "everything else" bucket, and the normal variance in resolution time. It is a judgment threshold, not a measured constant, so pick it deliberately, write it into the gate document, and hold it consistent across launches so the decisions remain comparable.

Sources

Sources

  1. Explore recipe: Forecasting ticket volumes by year
  2. What is Contact Rate? Definition, Formula & Benchmarks
  3. How to Implement Percentage Rollout Flags - OneUptime
  4. Use a canary deployment strategy - Google Cloud Documentation
  5. How do you forecast ticket volume and staffing without ...
  6. A 3-Step Framework to Forecast CX Headcount for BFCM
  7. Feature flagging for AI models: how to safely roll out changes - GrowthBook
  8. Microsoft Entra Connect: Cloud authentication via Staged Rollout
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles