The fix: never accept retainage without a written release trigger and a hard deadline attached to it. A 10% holdback with "released at final completion" is fine. A 10% holdback with no defined completion event, no timeline, and no interest is a loan you're making to your client at 0% — and you didn't agree to be a bank.
Retainage is standard on a lot of commercial and larger residential work. The client withholds 5-10% of each progress payment as security that you'll finish and fix any punch-list items. That's a legitimate structure. The problem isn't the concept — it's that the terms are almost always written to protect the client and left vague on the one thing that matters to you: when you actually get the money back.
When a 10% holdback is fair
Retainage works when three things are defined in the contract before you sign:
1. A release trigger — a specific event, like "substantial completion" or "issuance of certificate of occupancy," not a mood. 2. A timeline — retainage released within 30 days of that trigger, in writing. 3. A reduction step — many fair contracts drop retainage from 10% to 5% at 50% completion, because the client's risk shrinks as the job progresses.
When those three exist, the holdback is doing its job: it gives the client security and gives you a clear finish line. You can price the cash-flow cost into the bid and move on.
If nobody can tell you the date the money comes back, it's not retainage. It's an interest-free loan with your name on it.— GC with 20+ years on commercial jobs
When it's a trap
The trap is any holdback where completion is defined by the client's satisfaction instead of an objective event. "Retainage released upon final approval" gives the client a permanent excuse to sit on your money by simply never approving. Add a punch list that keeps growing and you've built a machine that holds 10% of your revenue hostage indefinitely.
The math is worse than it looks. On a $200K job, 10% retainage is $20K — often more than your actual margin. You've completed the work, paid your crew and suppliers, and the profit is parked in someone else's account with no release date. That's not caution on the client's part. That's you financing their caution out of your own working capital.
How to structure around it
You don't fight retainage by refusing it. You fight it by tying the release to an event that can't be stalled and a deadline that carries a consequence.
The strongest version is milestone-based release with the retainage held in escrow rather than in the client's operating account. When the money for each phase is funded up front and held by a neutral third party, the release trigger stops being a favor the client grants you — it becomes a condition that's already been met. You finish the milestone, the condition clears, the funds move. There's no "we'll get to it" because the money was never in the client's control to sit on.
That structure also protects the client, which is why it's easier to sell than a straight "no retainage" demand. They get their security. You get a guaranteed release mechanism. The only thing that disappears is the gray area where your profit goes to die.
If your last three jobs each left 10% floating for 60-plus days after you finished, the problem isn't your clients — it's that your payment terms leave the release date up to them. Build the trigger into the structure and that decision stops being theirs to make.