One Budget and Four Ways to Spend It
A project here carries one money budget. Its actual cost arrives from four independent streams — logged time, purchases, expenses and stock issued to the job. So the system can tell you the job is eighty per cent through its money and cannot tell you which of the four is why.
The short version
A single budget against a multi-stream cost is the most common shape in project software and the one that fails latest. It is accurate at the total and silent at every level below it, so a job whose labour has doubled and whose materials came in under looks exactly like a job that is running to plan — right up until the last stream lands.
Ask a project manager how a job is doing and they will not give you one number. They will give you three or four, because a job is not one kind of spending. Labour has one set of causes, materials have another, and a subcontractor has a third.
Ask a project system and you will very often get one number, because a budget is stored as one field.
What is actually assembled here, which is more than most
The cost side is genuinely good and it is worth setting out, because the shape of the problem depends on it. A job's actual cost is built from four separate real streams:
- Logged time, valued at the project's cost rate.
- Purchases raised against the job.
- Expenses claimed against it.
- Stock issued to it from your own inventory — and this one is costed at the moment it was issued rather than at today's average, which is a deliberate decision and the right one. It means a closed job costs the same twice, instead of moving every time an unrelated purchase shifts the average.
Two things worth knowing about that list. Payroll is not in it — time is valued at a project rate rather than at what the person actually costs, which is an argument we have made separately. And moving stock between your own stores carries no job, deliberately, because that is not consumption.
Four streams in. One number out. And on the budget side, one number in.
The arithmetic is right. The comparison it enables is the least useful one available.
Why a single budget hides the thing you needed to know
Because overruns in different streams have different causes, different remedies, and completely different lead times — and they cancel each other out in a total.
| Stream | What an overrun usually means | How early you can act |
|---|---|---|
| Labour | The estimate was wrong, or the work is harder than scoped | Early — hours accumulate daily and the trend is visible in week two |
| Purchases | Prices moved, or the specification changed | At commitment — the order is placed before the money is spent |
| Expenses | Travel, subsistence, plant hire running longer than planned | Late — claims arrive after the fact, sometimes weeks after |
| Issued stock | Waste, rework, or a take-off that was short | Immediately, if anybody looks at issue quantities |
The characteristic failure is not a job that quietly overruns. It is a job that reads fine for most of its life because a labour overrun is being masked by materials coming in under — and then the last stream lands, the masking stops, and the number moves a long way in one week with no event behind it.
By then the labour overrun is two months old and unfixable. It was visible in week two, in a figure nobody could see.
Why this bites hardest in North American commercial work
Because the whole commercial apparatus here is built on cost codes. A schedule of values is broken down by code. A change order is priced by code. A progress claim is presented by code. A subcontractor is measured against their portion of a code.
So there is an existing, precise, contractually meaningful breakdown of the budget — agreed with the client before the job started — and a system with a single budget field cannot hold it. The breakdown lives in a spreadsheet, and the spreadsheet becomes the real project system while the software holds the total.
That is a specific and expensive kind of failure, because the two disagree constantly and reconciling them is somebody's job.
Getting most of the way there today
The four streams are separately recorded and separately reportable. What is missing is a budget to compare each against — and a budget is a number you decided, which means you can keep it outside the system without losing anything except the automatic comparison.
-
Write the four budget figures down before the job starts
Labour, purchases, expenses, materials. They should add up to the number you put in the system. Doing this at the start takes ten minutes and is the whole of the setup.
-
Pull the four actuals monthly and compare by hand
Each stream is separately available. Four subtractions on one page, once a month, gets you the variance the system cannot produce.
-
Watch labour weekly and the rest monthly
Hours are the stream that accumulates continuously and the only one where acting early changes the outcome. The other three are lumpy and monthly is fine.
-
Split a large job into several projects
The blunt workaround, and it genuinely works. Each project carries its own budget, so phases or cost codes as separate projects gives you real per-line budgeting — at the cost of a portfolio view you assemble yourself.
That last one is worth taking seriously rather than treating as a hack. If your jobs are big enough that a single budget is useless, they are usually big enough that the phases are separately managed anyway.
Four questions for any job-costing system
Can I budget labour separately from materials?
What you will hear
Often a yes about categories.
How to read it
Ask whether the category has a budget or only a total. Nearly every system reports actuals by category; far fewer let you set a target per category, and only the second produces a variance.
Show me a job that is on budget overall and over on one line.
What you will hear
A pause.
How to read it
The clearest single request. It is the situation that costs money and the one a single-budget system cannot display, so a product that can show it has genuinely solved this.
What is in the actual cost, exactly?
What you will hear
A list.
How to read it
Ask specifically whether payroll is in it. Time valued at a standard rate is not the same as what people cost, and the difference is the margin on a labour-heavy job.
If I issue stock to a job today, what is it valued at?
What you will hear
Today's cost, usually.
How to read it
Ask what happens to the job's cost when an unrelated purchase moves the average later. If the answer is that it moves, closed jobs are not stable and nothing you reported last quarter still holds.
Three, and the first one is the whole argument
The four streams are already separately recorded and separately costed. What has to exist is a budget with the same shape.
A budget per stream
Labour, purchases, expenses and issued stock each with their own figure, and a variance for each — so a job that is fine overall and forty per cent over on labour says so, in week two rather than in month four.
Budget lines and cost codes
A named breakdown beneath the project with its own budget and its own actuals, so the structure you agreed with the client is the structure the system reports against — and the spreadsheet stops being the real project record.
Committed cost, not just spent
A purchase order raised is money gone, whatever the invoice date says. Showing committed alongside actual is what turns a budget report into a forecast, and it is the cheapest of the three to add.
How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. If your jobs are priced and claimed by cost code, the second item is the one to raise.
Talk to us about job costingWhat AWRA OpsHub does today
- Actual cost assembled from four real streams — logged time, purchases, expenses and stock issued to the job — each separately recorded and separately reportable.
- Issued stock costed at the moment of issue, so a closed job costs the same twice and an unrelated purchase cannot move a historic job's cost.
- A money budget and an hours budget, each with its own consumed percentage on the project.
- A project owner, department and customer, with milestones, a task tree and per-project status columns beneath.
- Stock issues naming the job they are for, tenant-verified so a guessed reference cannot charge another organization's project.
More we can add to your workspace
- A budget per cost stream, so labour, purchases, expenses and materials each carry their own target and their own variance.
- Budget lines or cost codes beneath a project, matching the breakdown a client agreed to and a claim is presented against.
- Committed cost shown alongside actual, so an order raised counts before its invoice arrives.
- A variance alert per stream, rather than a single percentage somebody has to open the project to see.
- Payroll cost reaching a job, so labour is valued at what people cost rather than at a project rate.
Where we point you to a specialist
- Issued stock stays costed at the moment of issue and we would argue against changing it. A job has to cost the same twice, and valuing an old issue at today's average would let a closed job move whenever an unrelated purchase shifted the average — which is a worse problem than the one it would solve.
- Transfers between your own stores carry no job on purpose. Moving your own goods from one shelf to another is not consumption, and charging it to a project would inflate the job and understate your stock at the same time.
- Which breakdown your budget should use is a commercial decision between you and your client, and in many contracts it is a contractual one. We would build the structure you specify and would decline to impose a coding standard of our own.
Per-stream budgets, cost codes beneath a project, and committed cost are one coherent piece of work we can scope and quote on.
Split one live job four ways
Take a job that is running now, pull its labour, purchases, expenses and materials separately, and compare each against what you assumed at the start. If any one of them surprises you, that is a conversation the total was never going to prompt.
Talk to us about project costing