I recently signed up for a service with a monthly subscription, and
had a minor billing issue. The service came in two forms — price
X/month with a setup fee, or price Y/month with no setup fee. Doing
the math, it was clear that if I stayed with this service for at least
five months, I’d be saving a considerable amount of money by going
with the setup fee. So I did.
Unfortunately, they goofed, and put me in the higher monthly rate, so
I called them to have it fixed. They were quite friendly, and
corrected the problem right away. They also reset my billing date at
the same time.
Now, this sounds pretty innocuous, and is a great example of customer
service, which I don’t find very often these days.
Shortly thereafter, I got a statement saying that a payment had gone
through for the service. Great. The statement had the wrong date,
but I just noted it and moved on, thinking “buggy software, they must
have a problem when they send out the first invoice, and have just
never noticed.”
When the second one came, I figured I might have a problem. The
reason was not so much that the date in the receipt was still wrong,
but rather that the receipt came five minutes after the first one.
You see, when I said they “reset” my expiration date, it somehow got
set to zero in unixtime. For the uninitiated, that’s January 1st,
1970.
On top of that, their billing software was set up to run automatically
every five minutes, and just added a month to the expiration date
each time they billed your credit card.
When the third one came, I logged in to my credit card statement, and
sure enough, there were three authorizations there (and this was not
a cheap subscription). Time to call customer service. :-)
Fortunately, this was not a company where you had to wait on hold for
half an hour — a person picked up the phone right away, and I was
able to explain my problem to him. Their first attempt to solve the
problem didn’t work, but by the time eight authorizations had gone
through, they got it fixed. They refunded all of the charges,
extended my expiration, and waived the setup fee, so I’m pretty happy
on the whole — especially since I got a glimpse of how an automated
billing system works. You can bet I’ll be thinking of that when it
comes time for me to write one!
Takeaway points:
Don’t run your billing system on a five-minute loop when you only
sell monthly and annual subscriptions. There’s no need, and it can
get you into very embarrassing situations. Especially when you accept
new customers over a long weekend.
If the expiration date is 30+ years before your company started,
that just might be an error condition. Any reasonable database will
let you set constraints for things like that, and it’s easy to add a
line of code to your program to do the same.
If you’re setting an expiration date, make sure it’s in the future,
especially if you’ve just processed a payment. Bill multiple months
worth of activity at the same time, if need be. That way, at least
the payment will be denied (or require confirmation) when you try to
apply 400 of them all at once.
If you don’t follow these points and have your billing system
blindly running every five minutes, make sure someone can call you and
get a real person immediately. If you have an automated telephone
system, I suggest the following: “For service in English, press or
say 1. Pour service en francais, appuyez ou dites 2. If our billing
system is charging you every five minutes, please repeatedly and
urgently shout and hit 0, and you’ll get moved to the front of the
line.”
After all, you’re going to have to refund all that money, and I don’t
know that you’ll get your merchant fees back.