At some point in the year, the owner of a service business looks at the accounts and wonders why the margin is thinner than it should be. The team has been busy. Billings look reasonable. Revenue has grown, or at least held. And the margin, the number that says whether the business is making money or just moving it, has come in below what was expected. The usual response is to hunt for the one big cause: a bad hire, an unprofitable client, a cost that drifted. The owner finds one or two, fixes them, and expects the margin to recover. It rarely does.
It rarely does because there was no one big cause. In most growing businesses margin is not lost in a visible decision. It leaks in a series of small operational moments that each look reasonable on the day and add up, across a year, to a gap nobody can trace. I ran the month end inside a business like this before I built systems for one, and the pattern was the same every month: the P&L said the margin was down, and it could not say where.
The five places it leaks
Five moments account for most of the avoidable margin loss I see. All five are individually small. All five look sensible at the time.
Scope drift. A job is scoped, priced and agreed. As it runs, the client asks for something adjacent. Whoever is closest says yes, because the ask is small and the relationship matters. A month later another small ask arrives. Within a couple of months the business is delivering noticeably more than it priced, with no extra fee agreed, and nobody can see how much of this is happening across all the live jobs. The fix is structural: a defined way of recording and rebilling scope changes on every job, so the conversation happens as routine rather than being avoided.
Delivery cost nobody measures. A well-priced job can still return weak margin if it costs more to deliver than it should. In most growing businesses the actual hours and materials on each job are not captured cleanly enough to know. People work across several jobs, time is estimated afterwards, and the owner has a rough sense of profitability rather than a real one. Jobs quietly running over never show as losses because there is no baseline to compare them to. This is the most consistent leak I see, and it is entirely a measurement problem.
Over-servicing without a fee to match. Some clients take far more attention than others, and often the attention has nothing to do with what they pay. The business serves them as premium clients because the relationship came to feel that way, while the fee was set at the normal level. Over time these clients absorb capacity their revenue does not justify. They are not doing anything wrong; they are asking for what has always been given. The absence of a service tier that either raises the fee or reduces the servicing is what lets it persist.
Client mix drift. Businesses grow by taking on clients, and rarely curate the mix. The roster fills with work at a range of prices and the owner loses sight of which clients produce the strongest margin and which the weakest. Some turn out, when the sums are done properly, to be loss-making once the true cost of serving them is counted. They are kept because the revenue is visible and the loss is not. Meanwhile the best clients get the least attention because they cause the fewest problems.
Cost creep on the delivery side. Salaries rise, subscriptions grow, contractor rates go up, materials cost more. Each increase is small and defensible. Across two years the cost base rises by several percent while prices stay where they were, and margin compresses without anyone deciding anything. The fix is an annual price review tied to the cost base, which only happens if someone can see the cost base move.
Any one of these produces a modest hit. All five together, which is the common case, produce the unexplained gap at year end.
Why the accounts cannot show you
This is worth being direct about, because it is not carelessness. The P&L is built from the wrong unit.
Accounts aggregate by nominal code: sales, cost of sales, wages, subscriptions. The leaks happen by job and by client. A scope creep of a few hours here, a client serviced at twice the rate its fee covers there, a job that ran over because a part was ordered twice: none of these appear as a line in the accounts, because the accounts were never designed to show them. The owner’s view is at the level of relationships and revenue. The leaks are one level down, where the accounts do not look.
So the fix is not for the owner to pay more attention. It is to record the business at the level where the margin is actually made: the job. Four things make the leaks visible.
- Margin by job, with hours, materials and overhead recovery against the price, visible while the job is still open rather than after it is invoiced.
- Scope changes recorded against the job they belong to, so out-of-scope work is rebilled or absorbed on purpose.
- Margin by client across all their jobs, so the roster can be looked at honestly.
- Cost trends by month, so creep is seen before it compounds.
None of this is exotic. It needs the data captured once, cleanly, at the point the work happens, and a report that reads it. Most growing businesses have neither, which is why the leaks stay invisible.
What this looks like built
The demonstration business on my Work page, Halden Electrical, is fourteen engineers and six hundred jobs that used to live in one workbook. Rebuilt as a Power Apps job system on Dataverse, every job carries its quoted price, the hours booked by each engineer from the van, the materials against it, and the margin, live. The same data showed £132,742 of completed work that had never been billed and 28 certificates outstanding. That is not a reporting trick. It is what happens when the record is kept at the job rather than reconstructed at the month end.
The reporting layer on top is Power BI reading the same records: margin by client, by job type and by engineer, current on a Monday morning. The reporting article covers what that layer does and does not do.
In short. Margin leaks by job and by client. The accounts aggregate by cost type, so they cannot show it. Keep the record at the job, with hours and materials against the price, and the five leaks become visible while there is still time to act on them.
What changes when the leaks are caught
The scope conversation happens as a matter of course, so the fee reflects the work delivered. Jobs running over show up in the data while they are still open. The client mix becomes a decision rather than an accident. Cost creep is caught in the quarter it starts rather than the year after. A business that recovers two or three points of margin on every job, which is often what is on the table, sees a material change in its bottom line, from hundreds of small decisions made with the numbers in view rather than in the dark.
The margin was not disappearing in one place. It was leaking in five. The fix is not to find the single cause. It is to keep the record where the margin is made.
If your job tracker has become the system, tell me what it does and I will tell you whether it is worth replacing. Start a conversation, or read about jobs, costing and invoicing.