ERP implementation

Profitable service projects: hours, labour cost and invoicing

XBuddy product team · November 2, 2026 · 8 min read

Service projects lose money through three gaps: unbilled hours, unknown labour cost and late invoices. How to measure correctly and close each gap.

Projects — Budget versions with plan versus actual

A consulting or software firm can be fully booked all year and still lose money. The story is familiar: a project is signed for VND 800 million, the team works at full capacity, the client is happy, yet when accounting adds it up, staff costs have exceeded revenue. Nobody loses money on purpose; the problem is that nobody saw the profit and loss figure while there was still time to act. Running profitable service projects comes down to three questions: which hours were worked, which hours are billed, and what each hour really costs. This article goes through each question and how to set things up so project profit and loss stays current.

Why service project management quietly loses money

In a service project, the largest cost is people's time. Unlike goods, labour hours do not sit in a warehouse to be counted. They leak through three gaps:

  1. Hours not recorded or not billed. Staff forget to log time, log vague entries like "internal meeting", or hours get approved but nobody puts them on an invoice.
  2. Unknown labour cost. The project manager knows the client rate but not what an hour of a senior consultant costs the company after salary, social insurance and benefits.
  3. Late invoicing. A milestone is accepted, but the invoice waits for month or quarter end; cash is delayed and the risk of dispute grows.

Worked hours are not billable hours

This is the most important distinction, and the one many businesses collapse into one number.

  • Worked hours are the time staff actually spent. They drive project cost, staff utilisation and, where relevant, payroll.
  • Billable hours are the hours put on the invoice. They drive revenue.

The two differ for many legitimate reasons: a new hire works slower than standard, part of the work is redone because of an internal mistake, or the manager decides not to charge some hours to protect the relationship. The difference is called a write-down.

Three principles:

  1. Never edit worked hours to match the invoice. Doing so erases the real cost trail and makes utilisation reports wrong.
  2. Decide write-downs at approval, with a reason. The approver understands the context best. Reasons (training, rework, goodwill) make later analysis possible.
  3. Only approved hours go on invoices. This prevents billing unconfirmed hours or billing the same hour twice.

Cost rate and bill rate

Every labour hour has two prices:

Cost rate Bill rate
What it is What one hour of work costs the company What the client is charged per hour
Used for Cost and project margin Quotes and invoices
Usually set by Position and grade (from salary and related costs) Project role, client price list

A simple way to estimate the cost rate: take the annual staff cost for a grade (salary, employer social insurance, allowances, benefits) and divide by the hours available in a year. For example, a consultant who costs the company VND 360 million a year and works 1,760 hours (220 days × 8 hours) has a cost rate of about VND 205,000 per hour. Management accounting should maintain this figure by grade rather than leaving project managers to guess.

Do not merge the two rates. If a system has a single rate and uses it for both cost and revenue, the margin of every time-based project will always be zero on paper.

Milestones and invoicing

There are two common ways to bill service projects, and many contracts combine them:

  • Time and materials: invoice periodically (weekly, monthly) from approved hours times the bill rate, plus rebillable expenses.
  • Milestones: each acceptance milestone carries a fixed percentage or amount. Reach the milestone, issue the invoice.

When using milestones:

  • Tie milestones to deliverables with clear acceptance criteria. "Phase 1 complete" invites argument; "specification document signed off by the client" does not.
  • Allocate milestone value close to effort. If 60% of the effort is in the first phase but the first milestone is only 20% of the value, you are financing the client.
  • Never bill an hour twice. Hours already covered by a priced milestone are not billed again by the hour.

Illustrative example: a three-month software rollout

Illustrative example with hypothetical figures. A software implementation contract worth VND 600 million (before VAT), with three milestones: 30% on signing, 40% on configuration acceptance, 30% on go-live. Planned effort is 1,200 hours.

Role Cost rate (VND/hour) Planned hours Worked hours Billable hours
Project manager 350,000 200 230 —
Consultant 250,000 600 720 —
Developer 220,000 400 450 —
Total 1,200 1,400

Actual labour cost = 230 × 350,000 + 720 × 250,000 + 450 × 220,000 = 80.5 + 180 + 99 = VND 359.5 million.

If the project consists only of the three fixed milestones, revenue is VND 600 million even though hours ran 200 over plan. Gross margin = (600 − 359.5) / 600 ≈ 40%. Compare with the plan: planned cost = 200 × 350,000 + 600 × 250,000 + 400 × 220,000 = VND 308 million, planned margin ≈ 49%. The 200 extra hours took away about 9 percentage points of margin.

Now suppose the client requests an out-of-scope integration, agreed on a time basis at a bill rate of VND 500,000 per hour. A consultant works 60 hours, 12 of which fix bugs the team caused. The manager approves 60 worked hours but records 48 billable hours, writing down 12 with the reason "rework due to internal error". Result:

  • Cost of the extra work: 60 × 250,000 = VND 15 million (all 60 hours still counted).
  • Revenue from the extra work: 48 × 500,000 = VND 24 million.
  • The write-down report shows 12 hours of rework, a topic for the retrospective.

The key point: if these figures only exist when the project ends, nobody can act on them. If the manager sees worked hours running 15% over plan at the end of the first month, they can renegotiate scope, adjust staffing or propose a contract amendment.

Real-time project profit and loss

Project profit and loss that updates daily needs four conditions:

  1. Every cost carries a project code: labour, travel, purchases, materials.
  2. Hours are logged and approved weekly, not piled up at month end.
  3. Cost rates come from one shared source maintained by management accounting.
  4. Revenue is recognised from actual invoices, not from estimated contract value.

Indicators to track: actual cost vs budget, worked hours vs plan, approved hours not yet invoiced, write-down rate, and gross margin.

Budget & Expenses screen showing budget, spent and remaining for each project

How XBuddy supports this

The XBuddy Projects app brings plans, approved hours, expenses, purchase orders and invoices together per project, with versioned budgets and project profit and loss. When approving time, managers can write down billable hours (a reason is required) without changing cost. Cost and bill rates can be kept separate on the rate card, and labour cost can come from accounting's internal rates by position and grade. Invoices are issued per period from approved hours or from milestones reached; only approved hours are invoiced. Internal projects record full cost but their hours cannot be billed. Time is logged through the Timesheet app. See also the solutions for IT services firms and project managers, or the Project PM assistant.

Frequently asked questions

What is the difference between worked hours and billable hours?

Worked hours are the time staff actually spent and drive project cost. Billable hours are the hours put on the invoice and drive revenue. The difference is a write-down, which should be decided at approval with a reason.

How do I calculate a labour cost rate?

A simple method is to take a grade's total annual staff cost, including salary, employer social insurance, allowances and benefits, and divide it by the working hours in a year. Management accounting should maintain this rate by grade so every project uses the same figure.

Should I bill by the hour or by milestone?

Hourly billing suits work whose scope is unclear or changes often; milestone billing suits work with well-defined scope and deliverables. Many contracts combine both: the core by milestone, changes by the hour, provided no hour is billed twice.

Why shouldn't worked hours be edited to match the invoice?

Editing worked hours erases the real cost of the project and makes utilisation and margin reports wrong. The right way is to keep worked hours intact and record billable hours separately, with a reason for any write-down.

How often should project profit and loss be reviewed?

At least weekly for active projects, right after time is approved. Spotting an overrun in the first month leaves room to renegotiate scope or adjust staffing; spotting it at the end only leaves you recording the loss.

Ready to see XBuddy in action?

Book a personalized demo and see XBuddy in action.