I’m writing about a problem that’s bit me in the bum a handful of times.
I don’t have a complete solution for it yet. But I think it’s important enough to raise the issue because it can be the root cause of ad performance dropping.
The problem is system decay.
Obviously computer code doesn’t really rust. But it does decay when people change things without understanding how systems are connected.
Here are some things I’ve seen:
Missing email
A client rebuilt their website. The old site had a contact form that sent two emails:
- one to the office
- one to Zapier
No one involved in the rebuild knew what the Zapier email did. The new contact form system only allowed for one email. So they removed it.
But the Zapier email was the bridge between the website and the lead handling system.
Sales handles thousands of leads a month. So nobody noticed the missing leads. The problem was only picked up three weeks later when they were trying to figure out why none of their Google Ads leads converted into customers.
At a reporting level, everything still looked fine. Clicks, leads and spend were all normal. But nobody in sales ever called a lead.
Missing lead sources
Another client switched to a bespoke operations-focussed CRM. The developers stopped capturing ad tracking info like utm_source and utm_campaign. They didn’t think it mattered. The ops manager who owned the project didn’t discuss it with the marketing minion.
Without knowing the real source, it looked like all the leads were coming from organic traffic. Their SEO looked good. Their ads not so much.
Broken phone field
Another client broke offline conversion tracking. Users wanted to add information about leads’ phone numbers like “01234 567890 (office number)”. Instead of adding a separate field, they changed the phone field to allow anything to be entered.
But the person who made the change didn’t know that the phone number was used as a matching identifier for offline conversions. Once extra text was added, Google couldn’t match leads to conversions.
Because Google wasn’t getting clean data, it stopped learning which leads booked. Ad performance suffered.
Mislabelled numbers
Another client mislabelled phone numbers. They were pushing hard to improve their Google Business Profile. They set up a separate phone number for each office’s profile so they could track how many calls came from their efforts.
The person who set up the numbers didn’t know the difference between calls from:
- Google Business Profile
- Google Ads call assets
- Google Ads landing pages
- Google’s Local Services Ads
And to make things more confusing, the call tracking system was using the old name for Google Business Profile: “Google My Business”.
She made the logical choice. All the numbers were for Google. All were for the business. So she set the lead source to “Google My Business”.
That channel looked amazing. The rest looked broken.

Well-intentioned people change things
The common theme here is that people change things without understanding the downstream impact on ads or marketing.
None of them were malicious or stupid. It’s just a case of not knowing what you don’t know.
In a perfect world every change would be run past someone who understood the downstream consequences. But that’s never going to happen. And even if you wanted to check every change, it’s quite likely that nobody understands all the implications. People change jobs. Businesses change software. Institutional memory fades.
So the longer a system runs, the more likely it is that someone will forget why sending leads to bx4g0g0dy@robot.zapier.com is important.

System decay is inevitable
And this makes life very difficult for anyone managing Google Ads. You end up basing important decisions on dodgy data.
It’s even worse if things are only partially broken. A no-data problem normally gets picked up quite quickly. But a bad-data problem is a bit like a dripping pipe under the house. You don’t notice it because the taps still work, but damage accumulates. By the time you see a crack in the wall, you’ve got an expensive structural problem.
Bad data doesn’t stop Google from learning. It just means it’s learning from the wrong inputs.
We who take the blame if Google Ads goes wrong need a protected source of truth. Something that’s insulated from the side effects of system changes. And we need an early warning system that shows when data quality starts decaying. By the time the ads are unprofitable it’s too late.
I don’t have the full solution to this yet. But I’m convinced that this is an important enough problem to be worth investing significant time into.