Profitability & margin

Project profitability: why your biggest client might be losing you money

Revenue tells you which client is biggest. It doesn't tell you which one is profitable. Here's how to work out the real margin on a project, and what to do when the number is bad.

·4 min read

Most agency owners can tell you their biggest client by revenue instantly. Far fewer can tell you which client makes them the most money. Those are different questions, and the gap between them is where agencies quietly go broke while looking busy and successful.

The pattern is consistent. The largest account gets the most senior people, the most scope creep, the most "quick calls", and the most goodwill work that never makes it onto an invoice. It also gets the biggest discount, because it was won in a competitive pitch. Meanwhile a boring mid-sized retainer nobody talks about runs at 60% margin with two people and almost no management overhead.

Revenue is not margin

Project profitability is simple arithmetic that almost nobody actually does:

Margin % = (Revenue − Delivery cost) / Revenue × 100

The trap is delivery cost. Most agencies calculate it as salary divided by hours, which understates it badly. The real cost of an hour includes:

That last one is the killer. A developer on a 40-hour week does not deliver 40 billable hours. Most agencies land somewhere between 60% and 75% utilisation once you count everything honestly. If you price against 40 hours and deliver 28, you have already given away a third of your margin before anyone writes a line of code.

A worked example

Two clients, same agency, same quarter.

Client AClient B
Revenue$120,000$45,000
Senior hours42090
Mid hours380310
PM / account hours24060
Loaded cost$98,400$27,600
Margin$21,600 (18%)$17,400 (39%)

Client A is nearly three times the revenue and produces slightly more absolute margin — on more than twice the delivery hours and vastly more management attention. Per hour of the team's life, Client A returns $20.77 of margin and Client B returns $37.83. The smaller client is worth roughly 80% more per hour of capacity it consumes.

Now ask the follow-up question: what would happen if you lost Client A? You'd free up roughly 1,040 hours. At Client B's margin rate, that capacity is worth considerably more than $21,600 — assuming you can sell it. That assumption is the whole game, and it's why nobody fires their biggest client on a spreadsheet alone.

Why the number is usually wrong

When agencies do attempt this, three things distort the result.

Hours aren't tracked against the right project. If time entries are approximate, or logged weekly from memory on a Friday, margin is fiction. You don't need six-minute increments, but you do need same-day entries against a real project code.

Non-billable work is invisible. The 45-minute call about the thing that wasn't in scope, the extra revision, the "can you just" request. Individually trivial, collectively the difference between 35% and 15%.

Fixed-price work hides overruns. On time and materials, an overrun shows up as a bigger invoice. On fixed price it shows up as nothing at all — the revenue is unchanged, the cost quietly climbs, and you only find out at the end, if ever.

The number that actually matters

Total margin per project tells you what happened. Margin trajectory tells you what's about to happen, and it's the one worth watching:

Projected cost = cost to date + (burn rate × estimated weeks remaining)

Track that weekly against the quoted value. A project sitting at 38% margin in week two and 27% in week four is heading somewhere you don't want to go, and you still have time to act — reduce scope, raise a change request, or move a senior person off the account. Discovering the same thing in the post-mortem means the only available lesson is "we should charge more next time."

What to do when the number is bad

Not every low-margin project should be dropped. Some are strategic: a logo you need for credibility, a sector you're breaking into, a relationship that pays off in referrals. The difference is whether it's a decision or a surprise.

Concretely, in order of how easily they work:

  1. Raise the price on renewal. Easier than everyone assumes with a client who is genuinely happy with the work.
  2. Change the team mix. If seniors are doing work a mid-level person could do, margin is being burned on seniority the client isn't paying for.
  3. Enforce the change request process. Not to be difficult — because unbilled scope is the single biggest margin leak in agency work.
  4. Reduce management overhead. Twelve hours a month of account management on a $6k retainer is a structural problem, not a people problem.
  5. Decline the renewal. Last resort, and only when you're confident you can sell the freed capacity.

Start with one project

You don't need a system to begin. Take your largest active project, pull the actual hours by person from the last month, apply a properly loaded hourly cost, and compare it to what you invoiced. It takes an afternoon in a spreadsheet.

Most people who do this for the first time find one of two things: a client they assumed was carrying the business is barely breaking even, or a quiet account nobody thinks about is the most profitable work they do. Either finding changes how you sell next quarter — which is the point.

Keep reading

All articles