6.7% to 11.2% net profit in 120 days
A tenant improvement GC was using each new job to finish the last one, and could see two weeks ahead at best.
What it looked like from the owner's chair
Revenue had swung between $3M and $8M with $9M projected, and cash was reactive the whole way. He was carrying debt from a bad year and working on a two week visibility window, so a job trending tight announced itself when it hit, not 60 days out. In his own words he was using income from new projects to finish and close projects already underway, and he couldn't see how to get off it.
What was actually happening
Four things stacked. Estimates weren't capturing every cost, so markup quietly became a contingency for scope nobody had priced. Overhead went into bids at 10% while the business had actually run 16.4% the previous quarter, because tenant improvement work is feast and famine and the assumption never flexed with it. There was no job costing, so nobody could see that project manager and superintendent time was being charged at roughly half what it cost. Collections were slow on top of all of it. Every job was underpriced before a crew mobilized, and the shortfall had to be funded by whatever job came next.
This is a known failure and it has a page of its own, with what it costs and how to size it in your business.
The work
We rebuilt the estimating template to price the work honestly: 10% of all labor for superintendent nonproductive time, 10% of superintendent time for project manager support, 10% for assistant project manager support, and a financing line for carrying material and subcontractors 30 days ahead of getting paid for them. Then weekly cash flow forecasting, which is what gave him enough runway to see work slowing and trim overhead ahead of it rather than after. That took 4 points out of the overhead rate, about $200,000 a year at his volume.
The result
Net profit went from 6.7% to 11.2% inside 120 days, a 4.5 point swing worth roughly $225,000 a year. Two merchant cash advances were retired, one at $4,200 a week and one at $14,200 a month, about $389,000 a year of debt service that stopped leaving the business, plus another $38,000 of debt paid down. Most of that gain is the overhead cut. The rebuilt estimating template hadn't fully landed at the 120 day mark because jobs bid under the old pricing were still working through backlog, so there's more coming.
Other contractors carrying the same thing
All 14 are on one page, filterable by which step did the work.
What owners ask about this one
What was actually wrong?
Four things stacked. Estimates weren't capturing every cost, so markup quietly became a contingency for scope nobody had priced. Overhead went into bids at 10% while the business had actually run 16.4% the previous quarter, because tenant improvement work is feast and famine and the assumption never flexed with it. There was no job costing, so nobody could see that project manager and superintendent time was being charged at roughly half what it cost. Collections were slow on top of all of it. Every job was underpriced before a crew mobilized, and the shortfall had to be funded by whatever job came next.
What did you change?
We rebuilt the estimating template to price the work honestly: 10% of all labor for superintendent nonproductive time, 10% of superintendent time for project manager support, 10% for assistant project manager support, and a financing line for carrying material and subcontractors 30 days ahead of getting paid for them. Then weekly cash flow forecasting, which is what gave him enough runway to see work slowing and trim overhead ahead of it rather than after. That took 4 points out of the overhead rate, about $200,000 a year at his volume.
How long did it take?
120 days. That is the time to the result on this page, not to the last piece of the install.
Which part of the system did it?
step 03, overhead calculation, step 04, estimating system and step 07, monthly cadence. Installed in dependency order, which is the same order every client gets, because a step that reads from a number nobody established yet produces output that looks finished and isn't.
