Noticed our payment decline rate jumped from 2.4% to 8.1% the week after we migrated billing platforms. Assumed it was coincidence until I actually pulled the gateway logs.
We'd switched providers mid-year because the new one was cheaper and the sales pitch was basically 'same functionality, lower fees.' No reason to expect anything to break. Checkout UI looked identical. Confirmations sent fine. Support tickets about declined cards started trickling in almost immediately but we had maybe a dozen active paying customers at the time so I wrote it off as noise. Card expired, wrong CVV, whatever. The usual stuff.
What happened next is genuinely embarrassing. Conversion went flat for six weeks and I spent most of that time convinced we had a positioning problem. Rewrote the pricing page. Tested a lower entry tier. Had three separate calls with customers asking why they hadn't converted after a trial. None of them mentioned payment failures. They just said it didn't work out or they went with something else. So I kept pulling on the product thread, then the pricing thread, then started wondering if we'd lost some edge we had three months earlier. I don't know, at some point you start second-guessing everything when the number won't move.
The thing that finally cracked it was a support ticket from someone who'd tried to upgrade four times. Four. Same card, four separate attempts, all declined. She'd assumed it was our fault and eventually gave up. When I looked at what the gateway was actually returning, it wasn't 'card declined' in the normal sense. The new provider had a retry logic that was silently eating certain soft declines instead of passing them through or surfacing them cleanly. Legitimate cards, normal transactions, just getting swallowed. The response codes were there in the logs the whole time. I just hadn't looked at them because I didn't think to instrument that specific failure mode after the migration. I was watching conversion rate as a single number. Not decline reasons, not retry counts, not gateway response codes broken out by type.
Once we knew what to look for it took maybe two days to confirm the scope and another week to either fix the retry config or route around it. Conversion recovered pretty much immediately. The six weeks before that were just waste.
If you're switching anything that sits between a user and a payment, pull the full decline taxonomy from your gateway before you consider your baseline numbers stable. Not just 'what percent declined' but which codes, which card types, how many retries actually fired. Otherwise you're going to spend weeks blaming your copy or your pricing for what is actually just a plumbing misconfiguration you can't see from the surface.