We keep 98% of our clients. People assume that's about code quality. It helps, but it isn't the reason — plenty of agencies write decent code and still lose clients constantly.
Nearly every relationship that breaks does so for the same reason: someone found out something late that they should have known early. Retention, it turns out, is mostly a communication discipline.
Bad news travels first
When something slips, the client hears it the same day. Not at the next scheduled check-in, not once we've figured out a fix — the same day.
This feels counterintuitive, and every instinct says to solve it first and report a resolved problem. But a delay disclosed early is a status update, and the same delay disclosed at the deadline is a betrayal. The information is identical. The relationship outcome is not.
No client has ever left us over a missed deadline they saw coming. Several nearly left over one they didn't.
Shared tools, not status reports
Our clients sit in our Slack and our issue tracker. They see the actual tickets, the actual commits, the actual review comments. There's no weekly deck that translates reality into something more comfortable.
This is uncomfortable at first — you can't quietly fix a mess before anyone notices. That's the point. It forces the mess to be small, because everyone sees it while it still is.
Estimates with their uncertainty attached
We don't say "six weeks." We say "four to eight weeks, and here's what determines which end." Then we name the specific unknowns and say when each will be resolved.
Clients handle uncertainty perfectly well when it's stated. What they can't handle is a confident number that turns out to have been a guess wearing a suit.
Saying no
We turn down work regularly — projects outside our competence, timelines that would require cutting corners we'd be ashamed of, and clients whose problem doesn't actually need software.
Every one of those declines costs us an invoice. Several have sent us three referrals. The arithmetic is not subtle, but it only works if the no is genuine rather than a negotiating position.
The uncomfortable part
This framework has a cost: it removes your ability to manage perception. You can't spin a bad week when the client watched it happen. What you get in return is that nobody is ever surprised — and surprise, far more than failure, is what ends relationships.