+1 (726) 224-7339

Building a Professional Services Resource and Utilization Model in Anaplan: Capacity, Staffing, Realization, and the Hiring Gap

Every planning discipline has a model that finance builds late and regrets not building sooner. In a professional services business — a consultancy, a systems integrator, an agency, a software vendor's delivery arm — that model is resource and utilization planning. Revenue in a services business is not a price times a volume. It is a person, available for a number of hours, assigned to a project, billed at a rate, for a period of time. Change any one of those four things and the P&L moves.

Most services organizations run this in spreadsheets: a staffing grid maintained by delivery leads, a utilization report from the time system, a backlog view from the CRM, and a revenue forecast in FP&A that reconciles to none of them. Anaplan is a natural fit precisely because the grain is small, the dimensions are obvious, and the reconciliation is the entire point.

This tutorial builds a services resource, utilization, and project profitability model end to end. It assumes working knowledge of lists, subsets, time ranges, and SUM/LOOKUP. If you have built a workforce planning model before, much of the cost side will look familiar — the difference is that here, people generate revenue as well as expense, and the same headcount cannot do both at once.

What the model has to answer

Write these down before you create a single list. Every design decision below traces to one of them.

  1. Do we have the people to deliver the work we have sold? Demand versus capacity, by skill and by month.
  2. What will we bill? Staffed hours times rate, by project and period, on a realistic ramp.
  3. What will each engagement earn? Revenue less delivery cost, by project, including the people we could not bill elsewhere.
  4. Where is the bench, and what is it costing us? Unassigned capacity, named, with a number attached.
  5. How much do we need to hire, and when? The gap between committed demand and available supply, offset by ramp time.

A model that answers one and two but not four and five is a staffing tool, not a planning model. The value to the CFO is in the gap and the bench.

Step 1: The dimensional skeleton

Four structural dimensions carry the whole model. Resist the urge to add more.

ListTypeNotes
ResourcesFlat production listNamed employees, plus generic "to-be-hired" placeholders and named subcontractors. One list, not three.
ProjectsFlat production listEvery engagement, plus internal and investment "projects" so 100% of time has a home.
Skills / RolesFlatGrade and capability combined: Senior Consultant — Data, Architect — Modeling. Keep it under about forty members.
TimeNative, monthlyWith weekly only if your staffing cycle genuinely runs weekly; it quadruples the model for most firms.

Two decisions that are expensive to reverse:

  • Placeholders belong in the Resources list. Create TBH-001 through TBH-050 up front as real list members with a Resource Type of To Be Hired. When recruiting fills one, you rename it and set a start date — the assignment, the cost, and the revenue history stay intact. Modeling open roles in a separate module and merging them later is the single most common structural mistake in these builds.
  • Internal time is a project. INT-Sales, INT-Training, INT-PTO, INT-Bench. If non-billable time has nowhere to go, utilization is calculated from a denominator nobody trusts, and the model starts losing arguments.

Step 2: Capacity

CAP01 Resource Capacity, dimensioned Resources × Time:

Resource Type        = Employee / Subcontractor / To Be Hired
Start Date           = hire or engagement start
End Date             = termination or contract end
FTE %                = 1.0, or 0.6 for part time
Standard Hours       = Working Days in Month * Hours per Day
Holiday Hours        = from a calendar module, by location
PTO Hours            = accrual or planned, by resource
Active?              = Start Date <= End of Period AND (ISBLANK(End Date) OR End Date >= Start of Period)
Ramp Factor          = productivity in the first months after start
Available Hours      = IF NOT Active? THEN 0
                       ELSE (Standard Hours - Holiday Hours - PTO Hours) * FTE % * Ramp Factor
Target Utilization % = by role, from a role assumptions module
Billable Capacity    = Available Hours * Target Utilization %

Ramp Factor is not decoration. A senior hire who starts in March is not fully productive in March, and a model that assumes they are will show a hiring plan that closes a capacity gap it does not actually close. Hold ramp curves per role in an assumptions module — typically 40% / 70% / 100% over three months for experienced hires, longer for graduates.

Prorate the start and end months properly. Active Days in Period / Days in Period applied to Standard Hours is enough, and it matters more than it looks: in a fast-growing services firm, a material share of capacity in any month comes from people who started partway through it.

Step 3: Demand

Demand arrives in three states of certainty and the model must hold all three at once.

DEM01 Project Demand, dimensioned Projects × Skills / Roles × Time:

Project Status       = Pipeline / Verbal / Signed / In Delivery / Closed
Probability %        = by status, from an assumptions module, overridable per project
Gross Demand Hours   = staffing plan hours by role and month
Weighted Demand Hrs  = Gross Demand Hours * Probability %

The staffing plan is entered by delivery leads for signed work and by sales engineering for pipeline work. For pipeline deals that have no detailed plan yet, give them a shape instead of a number: hold standard delivery profiles per project type — Implementation — Large, Health Check, Managed Service — as a percentage curve of hours by role over an elapsed-month index, then apply that curve to a total contract value and an expected start date.

Curve Month Index    = Period Index - Project Start Index + 1
Profile Hours %      = LOOKUP profile by Project Type, Role, Curve Month Index
Gross Demand Hours   = Total Estimated Hours * Profile Hours %

This is what makes pipeline demand usable. A sales team will never fill in a month-by-month staffing grid for an unsigned deal, but they will tell you the deal type, the size, and the likely start date, and that is enough to produce a defensible capacity signal.

Step 4: Assignment

ASG01 Assignments, dimensioned Resources × Projects × Time, with one line item that matters:

Assigned Hours = data entry

Everything else derives from it. This is the module delivery leads actually touch, so build the UX page for it before you build the rest of the model: a grid of their resources down, months across, with a project selector, plus an availability column that updates live.

Guard it with three checks in a companion module dimensioned Resources × Time:

Total Assigned      = SUM of Assigned Hours over Projects
Available Hours     = from CAP01
Over-Allocated?     = Total Assigned > Available Hours
Over-Allocation Hrs = MAX(0, Total Assigned - Available Hours)
Unassigned Hours    = MAX(0, Available Hours - Total Assigned)

Do not block over-allocation. Surface it. A planner deliberately over-allocating someone at 110% for one month while a deal closes is making a real decision; a hard validation rule that prevents it just drives the plan back into a spreadsheet. Make it visible, colour it red on the page, and report on it.

Apply Dynamic Cell Access so a delivery lead can edit assignments only for resources in their practice and only in open periods. Lock closed months against Period Status exactly as you would in a commission or close model.

Step 5: Utilization

Utilization is where services organizations argue most, usually because two departments are computing it two ways. Build all three definitions explicitly and label them on the page.

UTL01 Utilization, dimensioned Resources × Time:

Billable Hours        = SUM of Assigned Hours over billable Projects subset
Non-Billable Hours    = SUM of Assigned Hours over internal Projects subset
Billable Utilization  = Billable Hours / Available Hours
Gross Utilization     = (Billable + Non-Billable) / Standard Hours
Chargeability         = Billed Hours / Available Hours
Realization %         = Billed Revenue / (Billable Hours * Standard Rate)

Use a subset on the Projects list for billable versus internal rather than a text property — it makes the SUM cheap and stops the definition drifting.

The distinction that earns the model its keep is utilization versus realization. A consultant at 100% utilization on a fixed-fee project that is 30% over budget is generating less revenue per hour than one at 80% on time and materials. Utilization measures whether people are busy. Realization measures whether being busy produced money. Services firms that manage only the first one grow headcount and not profit.

Step 6: Revenue

Contract type drives revenue recognition, so branch cleanly on it. REV01 Project Revenue, dimensioned Projects × Time:

Time and materials:

Billable Hours (Proj) = SUM of Assigned Hours over Resources, billable only
Blended Rate          = LOOKUP rate card by Role, Client, Effective Period
Gross Fees            = SUM over Roles of (Hours * Rate)
Discount %            = client or engagement level
Net Fees              = Gross Fees * (1 - Discount %)

Fixed fee, percentage of completion:

Contract Value        = total fee
Budget Cost (Total)   = planned delivery cost at standard
Cost Incurred (ITD)   = cumulative actual + planned delivery cost
POC %                 = MIN(1, Cost Incurred (ITD) / Budget Cost (Total))
Revenue (ITD)         = Contract Value * POC %
Revenue (Period)      = Revenue (ITD) - PREVIOUS(Revenue (ITD))

Milestone or subscription: a simple schedule module dimensioned Projects × Time with an entered amount, summed in.

Rate cards deserve their own module dimensioned Skills / Roles × Clients × Time, with a global default and client-specific overrides that fall back when blank:

Effective Rate = IF Client Rate > 0 THEN Client Rate ELSE Standard Rate

Annual rate increases, MSA-locked rates, and offshore rate differentials all live here as data. None of them should ever be a formula.

Step 7: Cost and project margin

Delivery cost must follow the same assignment grain as revenue or the margin will not tie.

CST01 Delivery Cost, dimensioned Resources × Projects × Time:

Fully Loaded Cost/Hr  = (Salary + Benefits + Payroll Tax + Allocated Overhead) / Annual Productive Hours
Delivery Cost         = Assigned Hours * Fully Loaded Cost/Hr
Subcontractor Cost    = Assigned Hours * Sub Rate, for Resource Type = Subcontractor
Expenses              = travel and pass-through, entered by project

Then MGN01 Project Margin, dimensioned Projects × Time:

Revenue               = from REV01
Delivery Cost         = SUM over Resources from CST01
Expenses (Net)        = billable expenses net of recovery
Gross Margin          = Revenue - Delivery Cost - Expenses (Net)
Gross Margin %        = Gross Margin / Revenue
Effective Rate/Hr     = Revenue / Billable Hours

Use productive hours, not calendar hours, in the denominator of the cost rate. Dividing salary by 2,080 understates cost by roughly the PTO and holiday load — usually 12% to 15% — and that error lands directly in project margin, where it quietly makes every engagement look better than it is.

Bench cost is the other half of the truth. Cost assigned to INT-Bench is real and belongs in the practice P&L even though it belongs to no client:

Bench Cost = Unassigned Hours * Fully Loaded Cost/Hr

Reporting bench cost by practice and by month, with names behind it, is typically the first output of this model that changes a decision.

Step 8: The gap and the hiring plan

This is the output the executive team asked for, whether or not they said so.

GAP01 Capacity Gap, dimensioned Skills / Roles × Time:

Committed Demand     = SUM of Gross Demand Hours, Signed and In Delivery
Weighted Demand      = SUM of Weighted Demand Hours, all statuses
Billable Capacity    = SUM of Billable Capacity over Resources by primary role
Gap (Committed)      = Committed Demand - Billable Capacity
Gap (Weighted)       = Weighted Demand - Billable Capacity
Coverage %           = Billable Capacity / Weighted Demand

Then convert the gap into an action with lead times applied:

Hires Required       = Gap (Weighted) / Productive Hours per FTE
Recruit Lead Months  = by role, assumption
Ramp Months          = by role, assumption
Start By Period      = gap period offset backwards by Ramp Months
Post Req By Period   = Start By Period offset backwards by Recruit Lead Months
Sub Fill Required    = gap that cannot be closed by hiring in time

A gap in September for an architect with a three-month recruit cycle and a three-month ramp is a March decision. Showing that on one chart — demand, capacity, and the latest responsible requisition date by role — is the difference between a planning model and a reporting model.

Step 9: Backlog and the forward view

BKL01 Backlog, dimensioned Projects × Time:

Contracted Value      = signed total
Revenue Recognized ITD= cumulative
Remaining Backlog     = Contracted Value - Revenue Recognized ITD
Burn Rate             = current-period revenue
Months of Backlog     = Remaining Backlog / Average Burn Rate (3-month)
Book-to-Bill          = New Bookings / Revenue, rolling

Backlog coverage — what share of next quarter's revenue plan is already signed — is the single most predictive number a services business has. Show it as a stacked bar per quarter: recognized, signed backlog, weighted pipeline, and unidentified gap. Everyone in the room understands it immediately, and it links the sales forecast to the capacity plan in one picture.

Step 10: Pages that get used

Five pages, each for one audience:

  • Staffing Board (delivery leads) — resources down, months across, assignment entry, live availability, over-allocation flags.
  • Practice View (practice heads) — utilization, bench names and cost, gap by role, hiring requests with approval workflow.
  • Project Financials (engagement managers) — margin, POC, budget-to-actual hours, effective rate, estimate-at-completion.
  • Capacity vs Demand (COO) — the gap chart with a pipeline probability slider and an on/off toggle for subcontractors.
  • Services P&L (CFO) — revenue by contract type, delivery cost, bench cost, gross margin, backlog coverage, and a bridge from last forecast to this one.

Wire the hiring request as an Anaplan Workflow approval rather than an email. The request carries the role, start date, the gap it closes, and the margin impact, which is exactly the context an approver needs and never has.

Performance notes

  • Resources × Projects × Time is your largest module. Keep it to the entry line item plus a small number of derived items, and push everything else to Resources × Time or Projects × Time summaries.
  • Use a time range on the assignment module. Nobody staffs 36 months out; 18 forward months and 12 back is usually plenty, and the saving is large.
  • Subsets for billable versus internal projects, and for active resources, cut aggregation cost noticeably as the resource list grows past a few thousand.
  • Archive closed projects annually into a reporting model rather than leaving them in the live staffing grain.
  • If you model at weekly grain, model only the assignment and capacity modules weekly and summarize to monthly for everything financial.

Common mistakes

Building the staffing grid and stopping. Assignment data without cost rates and revenue logic produces a scheduling tool. The value is in the margin, the bench, and the gap.

Treating open roles as a separate module. Placeholders in the resource list from day one; rename on hire.

Ignoring ramp. Hiring plans that assume day-one productivity always under-hire, and the shortfall shows up exactly when the work arrives.

One utilization number. Publish the definitions on the page. Arguments about the metric are almost always arguments about the denominator.

Leaving pipeline out. Committed-demand-only planning means the capacity gap appears the week the contract is signed, which is months past the point where anything could have been done about it.

No bench accountability. If unassigned cost is not reported to a named owner by month, it is not managed.

Where to start

Build it in three releases, not one. Release one: capacity, assignments, utilization. That alone replaces the staffing spreadsheet and earns the delivery team's trust. Release two: rate cards, revenue by contract type, project margin, bench cost. Release three: pipeline demand curves, the capacity gap, the hiring plan, and backlog coverage.

Each release is usable on its own, which matters more in services than in most domains — the people who maintain the data are billable, and their patience for a model that does not yet help them is short. Get the staffing board right first and the rest of the model gets fed for free.

QuanticPlanning builds Anaplan models for services, technology, and industrial organizations — resource and utilization planning included. If you are scoping a build or need experienced Anaplan model builders on an existing one, get in touch.