Every services team I've worked with — agencies, MSPs, consultancies, professional services — runs the same three tools stitched together by spreadsheets and email. A project management tool for delivery. A helpdesk for client support. And a margin spreadsheet that lives on the finance lead's laptop. Three logins, three data models, zero shared context.
The setup feels fine. Each tool does its one job. The team gets used to it. But somewhere between month three and month nine of the year, leadership notices a gap between the quoted margin and the actual margin. The gap is rarely small. Across the teams I've seen, it sits at 10% to 20%, with 15% being the comfortable middle of the road. For a 30-person agency billing $6M a year, that's roughly $900K of margin that disappears into the cracks every twelve months.
Where does it go? Almost never to one big mistake. It bleeds out in dozens of small ones, and none of them are visible until the quarterly review.
The four places services margin actually leaks
Once you look at enough P&L reconciliations from services teams, the same four leaks show up over and over. They're not exotic. They're just invisible to the tooling stack most teams run.
1. Effort that overran the estimate — but never got logged as overrun
A designer estimates 12 hours for a landing page. The work ends up taking 19. Those 7 extra hours got logged against the project in the time tracker, but nobody flagged the estimate breach. The PM tool doesn't know what the estimate was. The time tracker doesn't know what was billable. The margin spreadsheet is closed until end-of-month. So the 7 extra hours just become part of "the cost of doing business" — except they aren't. They're a margin call that nobody picked up.
When this happens once a month per project, across 20 active projects, you're looking at 140 hidden hours a month. At a blended cost of $25/hour, that's $3,500 of leaked margin every month — and most of it traces back to estimates that the project tool and the time tool didn't talk to each other about.
2. Support work that was supposed to be billable
Client emails an agent. Agent fixes a small thing in 30 minutes. The fix saves the client a billable consulting hour, so the agent's instinct is "this is goodwill, don't charge it." Across a quarter, 80 little goodwill fixes cost the team about 40 unbilled hours. That alone is $1,000 of work being given away that the contract actually paid for. The helpdesk doesn't know the contract terms. The PM tool isn't watching the helpdesk. So nobody adds it up.
3. Freelance hours billed at the wrong rate
If a freelancer's contracted at $18/hour but your blended cost model in the spreadsheet assumes $15, every freelance hour silently eats $3 of margin. Multiply by 200 freelance hours a month and you're at $600 of leaked margin from a single freelancer doing nothing wrong — just a stale rate in a different sheet from the one billing runs from.
4. Capacity that nobody is on the hook for
A senior engineer is at 64% utilization for a month. The PM tool shows them "available." The capacity sheet hasn't been opened in three weeks. By the time it's noticed, that's 60 hours of paid capacity that didn't generate revenue. At a fully-loaded cost of $30/hour, that's $1,800 of pure overhead disguised as "we're between projects."
Where 15% margin actually goes
"The number we kept missing wasn't in any one tool. It was in the gap between them."
Why the stitched stack hides this
None of these leaks are a tooling failure on their own. The PM tool tracks projects beautifully. The helpdesk does support brilliantly. The spreadsheet calculates margin correctly — for the hours that made it into the spreadsheet.
The problem is the stitching. Hours get logged in one place. Estimates live in another. Bill rates live in a third. The reconciliation between them is a human job, and humans are busy. So the reconciliation happens monthly, or quarterly, or whenever someone notices the P&L is off.
By then, the work is done. The hours are sunk. The client has been billed. You can't go back and convert a written-off hour into revenue.
The four numbers that close the gap
The teams that don't leak 15% aren't doing anything clever. They've just brought four numbers into the same dashboard — and they look at it weekly, not quarterly.
1. Estimate vs actual hours, per active project, live
The moment a project crosses 80% of its estimated hours, somebody should know — same week, ideally same day. Not when the project is closed and the loss is booked.
2. Billable utilization, per person, this week
Not "are they busy" — but "are they busy on something a client is paying for." Internal work, training, downtime: all real costs, all need a name.
3. Margin per active client, this month
Calculated from logged hours × actual cost rate, against revenue this month. Not from the contract value. The contract value is a hope. Margin is a measurement.
4. Unbilled support effort, this month
How many hours did the team spend on client issues that didn't make it to an invoice? If that number is non-zero and unexplained, you're giving away margin you charged for.
You don't need a 90-day implementation to see these numbers
The reason most agencies don't bring these four numbers into one place isn't that it's impossible — it's that the cost of integrating their current three tools is bigger than the leak. A custom ETL pipeline, a BI dashboard, somebody on the team to maintain it: easily six figures of investment for a problem that's only worth seven figures over years.
That's the trap. The leak is real but not painful enough to fix with the current stack. So it stays.
The way out is to not have the three tools in the first place. When projects, tickets, time and margin live in the same workspace, every hour logged is already tied to a project, an estimate, a client, a cost rate, and a bill rate. The four numbers above aren't calculated by anyone — they're already in front of you. The leak disappears because the visibility was never the problem; the stitching was.
That's why we built BrioSync as one workspace instead of an integration of three — and why it has since grown into a full AI-native ERP (12 suites, 100+ modules), so the same live data runs through finance, procurement and HR too. Margin isn't a separate module. It's the same data the team is already entering, viewed live.
See where your margin is leaking — in one afternoon.
Book a demo. Bring one real project. Watch leakage, utilization and margin appear by tomorrow morning.
Book a demo →