Data AnalyticsDomain analytics and business cases

Workforce capacity planning without ranking individual workers unfairly

PK
Pankit Kumar
Sr. Data Scientist at Parexel (a Goldman Sachs–backed company) · 20 September 2026 · 3 min read
Technically reviewed by Ishaan Sharma
In this article (6 sections)

Capacity planning asks whether a team has enough available time and the right skills to handle expected work. It does not require ranking individual workers by raw case counts. Different tasks, shift conditions and support responsibilities can make those counts incomparable.

Start with aggregate workload and transparent assumptions. Then use a more detailed scheduling or queueing model when the service requirement demands it.

Define a simple planning scenario

The original synthetic workload fixture contains one queue with eighty expected contacts, twelve minutes of work per contact and an eight-hour scheduled shift per person.

Assume 25% of scheduled time is unavailable for handling this queue because of the activities included in the planning contract. Apply a target occupancy of 80% to the remaining available time. These are illustrative inputs, not recommended staffing standards.

Expected workload is 80 × 12 = 960 minutes. Available workload capacity per scheduled person is 480 × 0.75 × 0.80 = 288 minutes. The simple workload calculation therefore requires ceil(960/288) = 4 scheduled people.

Reproduce the arithmetic and sensitivity

python
from math import ceil, isclose
from build_and_verify import database

db = database()
queue,contacts,minutes,shift,shrinkage,occupancy = db.execute('SELECT * FROM workload').fetchone()
db.close()
assert contacts>=0 and minutes>0 and shift>0
assert 0<=shrinkage<1 and 0<occupancy<=1
capacity = shift*(1-shrinkage)*occupancy
required = ceil(contacts*minutes/capacity)
assert isclose(capacity,288) and required==4
assert 3*capacity < contacts*minutes <= 4*capacity
scenarios = {demand:ceil(demand*minutes/capacity) for demand in (60,80,100)}
assert scenarios=={60:3,80:4,100:5}
print({'workload_minutes':contacts*minutes,
       'per_person_workload_capacity_minutes':capacity,
       'scheduled_people_workload_estimate':required,'demand_scenarios':scenarios})

With otherwise unchanged inputs, sixty contacts require three people under this arithmetic, while one hundred require five. These are scenario outputs, not confidence intervals or a guarantee of a waiting-time target.

Avoid double counting unavailable time

Define what the twelve-minute handling estimate includes. If it already includes after-contact work, do not add that work again as a separate workload component. If scheduled training is included in shrinkage, do not subtract it a second time from the shift.

Also distinguish occupancy from shrinkage. In this example, shrinkage removes unavailable scheduled time; occupancy reserves a portion of the remaining time rather than assuming continuous handling. The exact operational definitions must match the source system and planning model.

Recognize the limits of an average workload model

Four people with enough total minutes may still miss a service target if contacts arrive in a sharp peak or require a scarce skill. Average workload does not describe arrival variability, waiting, abandonment, concurrency or routing.

For a voice queue, a queueing model or simulation with appropriate assumptions may be needed to evaluate service levels. For project work, task dependencies and deadlines can dominate. For multi-skill teams, capacity in one skill cannot automatically cover demand in another.

Use shorter planning intervals when within-day variation matters. Preserve schedule feasibility, required breaks and the actual activities that make time unavailable. The simple calculation is a starting estimate, not a complete roster.

Keep analysis from becoming an unsupported worker score

A person handling complex escalations may complete fewer cases while contributing more effort. Raw counts can also be affected by case assignment, training duties, system outages and shift demand.

For team planning, aggregate comparable work types and estimate their workload. If an individual-level operational review is legitimately needed, include context, data quality and a process for correcting errors. Do not infer motivation or competence from an unexplained productivity ratio.

The fixture intentionally contains no employee identifiers. It demonstrates that useful staffing arithmetic can be performed without constructing a league table of workers.

Exercise: split the eighty contacts into two skill groups, one of which only half the team can handle. Show why the aggregate four-person estimate no longer establishes that the schedule is feasible. State the additional constraints needed for a roster model.

NeuraPath's Data Analytics with Generative AI course connects quantitative planning with careful interpretation. A useful capacity model explains its workload assumptions and the service questions it has not yet answered.

Continue learning

This article is part of the Domain analytics and business cases sequence. Use the neighbouring tasks when you need the prerequisite or the next application.

PK
Pankit Kumar
Lead Instructor, NeuraPath Academy

Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.

This article is part of our Data Analytics with Generative AI programme — 3–4 months. The full analyst stack — Excel, SQL, Power BI and Python pipelines — then a generative-AI layer you can prove is right.

Explore Data Analytics with Generative AI
Counselling is free · no obligation

Not sure which programme fits?

Tell us your background and we will map it to the right entry point — including saying so when a cheaper programme is the better fit. A counsellor replies within one working day.