Adapting to client preferences is the whole game, but the real mistake agencies make is treating communication frequency as a fixed variable. Different clients live in different operational realities. A founder who's bootstrapping wants a weekly pulse check. A CMO with a dedicated analytics team needs a monthly report dump and nothing else until something breaks.
A quick tiering framework that's worked well across teams I've consulted with:
client_tiers = {
"high_touch": {"cadence": "weekly", "format": "scheduled call + PDF"},
"mid_touch": {"cadence": "biweekly", "format": "async video + dashboards"},
"low_touch": {"cadence": "monthly", "format": "email + live dashboard link"}
}
The key is setting the expectation on the front end, not guessing mid-contract. A colleague learned this the hard way after a client walked over "you never sent me the report" when the report was sitting in their portal for three weeks. That was a communication-format failure, not a data failure.
The process should always include a documented cadence agreement signed off during onboarding. Then the reporting automates itself - no ambiguity, no last-minute scrambling to pull numbers. If a client escalates to weekly, you know it's a change order or an at-risk signal worth acting on.