AWRA OpsHub Search

The Rate You Cannot Override

What you charge for an hour can be overridden on that single hour. What the hour costs you cannot be overridden at all. In a firm that mixes partner and graduate time, that asymmetry quietly reports margin improving at the exact moment it is collapsing.

Professional Services Washingtone Aura 11 min read

Every professional firm eventually asks the same question about an engagement: did we make money on it? The answer is a subtraction — what we billed, minus what it cost us to deliver. Firms spend enormous care on the first term. The second is usually a single number somebody typed into a field eighteen months ago, and it is wrong in a way that is both systematic and invisible.

This article is about that number. It is a genuinely useful mechanism with one structural limitation, and the limitation is not that the number is approximate — everyone knows it is approximate. It is that the direction of the error moves with your staffing mix, so the figure is least trustworthy in precisely the months you most need it.

Two rates, and only one of them bends

An engagement carries two hourly rates: a cost rate — what an hour of delivery costs the firm — and a bill rate — what an hour is charged out at. Both are optional, both are single figures on the engagement, and both are copied onto every time entry at the moment it is logged. That copying is correct and deliberate: it means changing an engagement's rates next quarter moves only future hours, leaving last quarter's figures exactly as they were reported. A rate is a fact about a date, and the same principle applies to tax rates.

The asymmetry appears in what happens next. When an hour is logged:

The same form, two different behaviours

What is offered What is stored

Bill rate per-entry, overridable

There is a rate field on the time-logging form itself, and the same parameter exists on the API. Type a figure and that hour is charged at that figure. Leave it blank and it falls back to the engagement default.

Cost rate engagement only, fixed

Taken from the engagement and nothing else. There is no field on the form, no parameter on the API, and no validation rule accepting one — on either path. Every hour on the engagement costs the same figure, regardless of who worked it.

This is not a permissions question or a hidden setting. The override does not exist on the cost side, so there is nothing to enable.

The consequence is arithmetic. An engagement's labour cost is the sum of hours times the cost rate on each entry — and since each entry carries the engagement's figure, that reduces to total hours times one number. A partner hour and a graduate hour cost the firm the same amount in every report the system produces.

The engagement does not know it was delivered by senior people. It knows how many hours it took.

Why the total can look right while every part is wrong

The natural defence is that a blended rate is fine — set it to your genuine average cost per delivered hour and the totals come out right. That defence holds, and it holds only for the staffing mix you calibrated on. Here are two months of the same engagement, same two hundred hours, same blended rate.

Two months of 200 logged hours costed at the same KES 1,300 blended rate: month one, with 20 partner, 60 manager and 120 graduate hours, records 260,000 against a true 260,000; month two, with 60 partner, 40 manager and 100 graduate hours, records the same 260,000 against a true 372,000, understating cost by 30 per cent.
Identical hours, identical recorded cost, and a true cost 43% higher in the second month. Nothing in the reported figures distinguishes them.

Month two, worked out

Partner — 60 h at a true cost of 4,000 KES 240,000
Manager — 40 h at a true cost of 1,800 KES 72,000
Graduate — 100 h at a true cost of 600 KES 60,000
True delivery cost of the month KES 372,000
Recorded: 200 h at the engagement rate of 1,300 KES 260,000
Delivery cost missing from every report KES 112,000

The month the engagement went badly — when the graduate's work had to be redone by a partner, when the review took three senior people instead of one — is the month the true cost rose and the recorded cost did not move at all. Because billed value did rise (senior hours usually carry a higher bill rate, and that rate is overridable), the engagement reports a better margin in its worst month.

This is the part worth sitting with

An error that is merely large is survivable, because someone eventually notices and applies judgement. An error whose sign moves with the thing you are trying to measure is worse than no measurement, because it is confidently pointing the wrong way. Escalating an engagement to senior staff is the standard response to trouble — and it is the exact action that makes the cost figure understate most.

What to do about it, in order of effort

None of these require anything to be built. They are ways of using what exists so the figure means what you think it means.

  1. Set the rate to the mix you actually expect, per engagement

    The rate is per engagement, not global — which is the lever. A partner-led advisory piece and a volume compliance job should not carry the same cost rate, and if they do, you have thrown away the one degree of freedom you have. This alone removes most of the error for most firms.

  2. Split by grade where the mix is genuinely mixed

    If one engagement genuinely runs partner and graduate time in serious volume, run it as more than one engagement — a delivery workstream and a review workstream, each with its own cost rate. Slightly more admin, and it restores the arithmetic completely.

  3. Recalibrate on a schedule, not on an incident

    Because rates are snapshotted at log time, revising an engagement's cost rate is safe: history does not move. So review the figure quarterly against actual payroll cost per delivered hour. There is no penalty for changing it and a real penalty for leaving it.

  4. Read margin as a trend, and hours as the truth

    Hours by person are recorded exactly. Cost is a model. When the two disagree, believe the hours — an engagement where senior hours are climbing is in trouble whatever the margin line says.

  5. Take the labour cost from payroll for anything that matters

    For a year-end profitability review or a partner-remuneration decision, do not use the engagement cost figure. Take actual salary cost per person from payroll and apply it to that person's recorded hours yourself. The hours are the valuable part; the rate is the part you can improve on outside the system.

One more place the same figure shows up

The engagement cost rate is not only a reporting number. It is also the default price when the firm pays people for logged time: a payout drafted from unpaid hours prices each person's line at the engagement cost rate. There the fix is easy, because a payout line's rate can be edited before the payout is approved — so an associate is paid their actual agreed rate rather than the engagement blend. Worth knowing that this is the one place the single figure gets a correction opportunity, and that the correction happens on the payout, not on the hours.

The billing side is worth a note too. When a draft invoice is built from billable time, entries are grouped into lines by their bill rate — which is why the per-entry bill override is genuinely useful rather than cosmetic: three rates on an engagement produce three invoice lines a client can read. The corresponding trap is that an entry whose effective rate works out to zero is dropped from the draft rather than billed at zero. If every entry is rate-less you get a clear refusal telling you to set a rate — but in the ordinary mixed case, where most entries have a rate and a few do not, the few are silently left off the invoice. So set an engagement bill rate even when you intend to override every line: it is the fallback that stops an hour disappearing.

Rates on time — the straight answer

What AWRA OpsHub does today

  • A cost rate and a bill rate per engagement, both optional.
  • Both rates snapshotted onto every time entry when it is logged, so changing an engagement's rates never restates history.
  • A per-entry bill-rate override on the logging form and on the API, falling back to the engagement default.
  • Billable and non-billable time distinguished on the entry itself.
  • Logged cost and billable value computed per task and per engagement, each falling back from the entry's snapshot to the engagement figure.
  • Draft invoices grouped into lines by bill rate, so several charge-out rates on one engagement read correctly to the client.
  • Payout lines priced from the engagement cost rate but editable before approval.
  • The same fallback logic in the reporting dataset, so a report and the engagement screen agree.

What it does not do

  • No per-entry cost-rate override anywhere. Not on the form, not on the API, not as a validation rule. Every hour on an engagement costs the engagement's single figure.
  • No rate card. Nothing holds a rate per person, per grade or per client that could be looked up automatically.
  • No link from payroll to the cost rate. The figure is typed by you, not derived from anybody's actual salary.
  • No mix or blend warning. Nothing notices that this month's hours came from a very different grade mix than last month's.
  • No revision history on either rate. You can see the rate stored on each entry, which is the useful half; you cannot see when or by whom the engagement figure was changed.
  • No work-in-progress valuation, so recorded-but-unbilled time is visible as hours rather than carried as a balance.
  • No realisation or write-off tracking against billed value — covered separately, and still absent.

The snapshotting is the part we would defend hardest: it is the difference between a system whose historical numbers are stable and one whose reports change under you. The missing cost override is the part to plan around, and the plan is cheap — set the cost rate per engagement to the mix you expect, split engagements when the mix is genuinely wide, and take labour cost from payroll for any decision with money attached to it.

Our take

Recorded hours per person are a fact and they are captured well. Cost per hour is a model with one parameter, and a one-parameter model of a mixed-grade firm is right on average and wrong in every particular. Use the hours as your evidence and the margin line as a prompt to go and look — never the other way round.

Check one engagement tonight

Take your most senior-heavy engagement, divide its recorded labour cost by its logged hours, and ask whether that figure could plausibly be the cost of the people who actually did the work.

See projects, time and budget

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center