Professional Services Automation (PSA)

The ERP flavour for businesses whose product is people’s time: consultancies, agencies, law firms, engineering practices, IT services, and the services arm of a software company.

Why services needs its own model

In manufacturing, capacity is machines and inventory is goods. In services, capacity is people and inventory is unsold hours — and unsold hours are perishable. An hour not sold on Tuesday is gone forever.

That single fact drives everything: utilisation obsession, bench management, resource forecasting, and the fact that a services business fails from under-selling, not from over-spending.

The services lifecycle

Opportunity ──▶ Estimate ──▶ Proposal ──▶ Contract ──▶ Resourcing
                                                            │
                    ┌───────────────────────────────────────┘
                    ▼
              Delivery ──▶ Time & expense ──▶ Approval ──▶ Billing ──▶ Revenue recognition
                    │                                          │
                    └──────▶ Project accounting ◀──────────────┘

Contract and billing models

Model Revenue Risk
Time and materials (T&M) Hours × rate, billed as incurred Client bears overrun risk
Fixed price Agreed total, billed on milestones You bear overrun risk
Capped T&M T&M up to a ceiling You bear risk above the cap
Retainer Fixed monthly fee for availability or a block of hours Predictable; watch unused-hour rollover rules
Milestone / deliverable On acceptance of defined outputs Acceptance disputes
Outcome / success fee Based on results achieved Highest risk, highest margin
Managed service Fixed fee for an ongoing service Scope creep
Prepaid block of hours Sold upfront, drawn down Deferred revenue until consumed

Most real contracts are hybrid: fixed price for phase 1, T&M for change requests, retainer for support. Your data model must support several billing models on one engagement, or every real contract becomes a workaround.

Rate cards

rate_card(
  id, client_id, contract_id, effective_from, effective_to,
  currency
)
rate_card_line(
  rate_card_id,
  role,            -- PARTNER | PRINCIPAL | SENIOR_CONSULTANT | CONSULTANT | ANALYST
  grade, location,
  billing_rate, cost_rate,
  overtime_multiplier, weekend_multiplier
)

Rate determination hierarchy, most specific wins:

1. Person + client (a named individual's negotiated rate)
2. Role + client
3. Role + client segment
4. Role + region
5. Standard rate card

Plus: annual rate escalation clauses, volume discounts, blended rates (one average rate for a mixed team), and currency for offshore delivery.

Cost rate vs billing rate: cost rate should be fully loaded (salary + employer costs + benefits + a share of overhead), not just salary. Using bare salary as cost rate overstates every project’s margin by 40–60%.

Resource management

The core operational problem: match people to demand.

resource_assignment(
  person_id, project_id, wbs_element_id,
  role, start_date, end_date,
  allocation_pct or hours_per_week,
  assignment_type,   -- SOFT (pipeline) | HARD (committed) | ACTUAL
  billing_rate, cost_rate,
  status
)

Soft vs hard booking is essential: a soft booking reserves someone against an unsigned opportunity (weighted by probability), a hard booking is committed. Without the distinction, either you double-book people or you never plan ahead.

The capacity view

Person: Nabila Rahman, Senior Consultant

Week      Capacity  Booked  Available  Utilisation
W12          40      40         0        100%
W13          40      32         8         80%
W14          40      44        (4)       110%  ← over-allocated
W15          40      16        24         40%  ← bench
W16          32*      0        32          0%  ← *8h training

Alerts on both over-allocation and bench time. Bench is expensive; over-allocation is how you burn out your best people and lose them.

Skills and matching

person_skill(person_id, skill_id, proficiency, years_experience,
             certified, certification_expiry, last_used)

Used for staffing search, gap analysis against pipeline demand, and training planning. Keep it honest — self-assessed skills matrices decay into fiction unless reviewed.

Utilisation — the defining metric

Billable utilisation   = billable hours / available hours
Total utilisation      = (billable + productive non-billable) / available hours
Realisation rate       = billed amount / (billable hours × standard rate)
Effective rate         = billed amount / total hours worked
Nabila, March:
  Calendar hours              176
  − Leave                     (16)
  − Public holiday             (8)
  = Available                 152
  Billable hours              118    → 78% utilisation
  Internal/training/sales      26
  Bench                         8
  Billed at standard rate  944,000
  Actually billed          873,000    → 92.5% realisation

Realisation is where profit leaks. Hours worked but written off — because the client disputed them, the fixed price was exhausted, or the manager discounted to keep the peace — never appear in utilisation. A team at 85% utilisation and 75% realisation is less profitable than one at 75% utilisation and 98% realisation.

Targets vary: 70–80% for senior consultants, 80–90% for juniors, 30–50% for partners (who sell). A firm-wide target applied to everyone is a management error.

Time and expense capture

The one thing everyone hates and everything depends on.

timesheet(person_id, period_start, period_end, status, submitted_at, approved_by)
timesheet_line(
  timesheet_id, date, project_id, wbs_element_id, task_id,
  hours, activity_type, billable_flag,
  billing_rate, cost_rate,
  description,              -- appears on the client invoice — quality matters
  status                    -- DRAFT | SUBMITTED | APPROVED | REJECTED | BILLED
)

Design principles:

  1. Make it fast. Mobile, pre-filled from last week, copy-forward, favourites, timer.
  2. Daily, not weekly. Memory decays; Friday-afternoon reconstruction is fiction.
  3. Descriptions matter — they go on the client invoice. “Worked on project” invites a dispute; “Reviewed data migration mapping for customer master, 3 workshops with finance team” does not.
  4. Approval is a control. The project manager approves before it can be billed.
  5. Lock after billing. A billed timesheet line cannot change; corrections are adjustments.
  6. Reconcile against attendance — unbooked time means understated project cost.

Expenses: receipt capture (photo + OCR), per diem rules, mileage rates, policy limits, client-billable flag, markup rules, and VAT recovery. Non-billable expenses must be distinguishable from billable ones at capture, not at invoicing.

Work in progress and billing

WIP = approved, unbilled time and expenses at billing value

Ageing WIP is a problem:
  0–30 days    normal
  31–60 days   chase
  60+ days     likely to be written off

WIP write-off is the quiet killer of services profitability. Time sits unbilled, the client relationship moves on, and eventually someone writes it off. Report WIP ageing by project and by manager, weekly.

Billing run:

1. Select approved, unbilled time and expense in the period
2. Apply the contract's billing model (T&M / milestone / fixed)
3. Apply caps, discounts, and prepaid drawdowns
4. Generate a draft invoice with the detail the client's contract requires
5. Project manager reviews — writes off, adjusts, or defers lines
6. Approve → issue invoice → post to AR
7. Revenue recognition per the contract (may differ from the invoice)

That review step is where write-offs happen. Track them: write-off by reason and by manager is one of the most revealing reports in a services business.

Revenue recognition for services

  • T&M — over time, as work is performed. Usually equals what’s billed.
  • Fixed price — percentage of completion, usually cost-to-cost. Independent of billing milestones. See Revenue Recognition.
  • Retainer — straight-line over the period
  • Prepaid hours — contract liability, recognised as consumed
  • Success fee — variable consideration, constrained until probable

Subcontractors

Services firms subcontract constantly. Model them as resources with:

  • A purchase order or framework agreement
  • A cost rate (what you pay) and a billing rate (what the client pays)
  • Time approval by your project manager before you accept their invoice
  • Self-billing in many arrangements
  • Margin visibility — subcontractor margin is usually thinner and must be reported separately, or blended margin hides it

KPIs

Metric Meaning
Utilisation Billable hours / available
Realisation Billed / billable at standard rate
Effective hourly rate Revenue / total hours
Gross margin by project / client / practice Where you actually make money
Bench % Unassigned capacity
Pipeline coverage Weighted pipeline / capacity for the next quarter
WIP days Unbilled work in process
DSO Collection
Project margin variance Estimated vs actual — is estimating any good?
Attrition Losing people is losing capacity and client knowledge
Revenue per head The headline productivity number

Developer notes

  1. Time entry UX is the most important UI in the system. Invest disproportionately.
  2. Soft vs hard resource booking — model both.
  3. Rate determination is a hierarchy with effective dates, like pricing.
  4. Billing and revenue recognition are separate schedules.
  5. WIP ageing and write-off tracking — build these reports early; they find money.
  6. Fully-loaded cost rates, not salary.
  7. Multiple billing models per engagement must be supported from the start.
  8. Approved and billed lines are immutable. Adjustments are new records.

Next