BanksAs I’ve mentioned here before and as noted in the about page, I do some freelance web site development in addition to my “day job” in scientific research. I’ve been doing the web thing for a long time. Well, it’s a long time in internet years. To give you some idea, I was designing web pages and writing code for them back when the idea of buying a book from this weird-sounding company called was a new and exciting experience. Not to get all Abraham Simpson on you, but I was doing this stuff back when Yahoo was still being run by a couple smart kids out of their Stanford dorm room.

In my travels, I’ve done a lot of different kinds of work for lots of different companies. Some of them, like the late Long Island Savings Bank, have gone the way of all flesh. Some have moved well past the simple work I did for them so many years ago, replacing my code with newer ideas or newer technology. But some of the work I did years ago is still out there, in production. There are bits in pieces of my code scattered all over cyberspace like electric breadcrumbs.

I still keep my hand in. I have about a dozen current clients. But these days I don’t actively market myself and I’m very selective about taking on new work.

But occasionally a former client reaches through the ether and contacts me, asking for a fix or an upgrade for some work I did for them back in the day. Just this Tuesday I got a call from an ad agency I used to do a lot of sub-contract work for. Turns out that one of their clients, a regional, New England bank who shall remain nameless, is in the process of getting audited and they need to explain some anomalys in their mortgage rate page. The bank called the ad agency and they called me.

Now I wrote the code for that rate page. In fact, their web site stills runs the integrated package of rate tables and calculators that I first wrote back in 1996 for yet another bank. I thought it was clever back when I first did it, but I thought that somebody would have thought of something better by now. No such luck

The problem, as it is told to me, is that the payment per thousand (PPT) for the adjustable rate loans are all the same. This must be wrong, I’m told. Could I please look into it and fix it? The last time I even touched that code was back in October of 2007. I haven’t changed anything. I assume that they haven’t changed anything. If it was working then, why isn’t it working now?

So I call up the page and look at it, trying to refresh my memory on how everything works. Each adjustable rate loan actually lists two payment per thousand numbers. The first one has a little superscript “1”, which if you follow down to the bottom of the section indicates “Base loan rate and base monthly payment”. The second one has a little superscript “2”, which means “Monthly payment based on fully indexed rate”. The payment per thousand values marked “1” are different for each loan. The ones marked “2” are all the same. This is, to their thinking, the problem.

Except, that it’s not. The base rate payments are calculated using the “teaser” rate in the adjustable loan. This is the rate you’re paying before the adjustable rate adjusts or resets. This rate is usually higher, the longer it’s in effect. For a 3/1 adjustable loan, where the low rate is in effect for the first three years, is going to have a lower inital rate than a 5/1, which guarantees you that rate for five years. These rates, the ones marked with a “1”, are all different because the loans offer different initial rates.

The other PPT, the one marked with a “2” is based on the fully indexed rate. That’s the interest rate you would be paying today if the rate reset. This rate is usually based on a fairly straightforward formula. Often it’s an margin added to some other interest rate. In this case, it’s the one year t-bill rate.

But that margin is the same for all of the bank’s adjustable loans, no matter how long the initial period is for. So the “fully indexed rate” is the same for all of them. So, obviously, the payment per thousand is the same for all of them. So there’s no error.

The point here is…why do I have to be the one to tell them this? I have no formal background in banking or finance. I’m just the code monkey. All I know about this stuff is what I’ve picked up here and there.

Not only did the bank not figure this out, despite the fact that’s it’s clearly indicated on the rate page, but the auditors missed it as well. Bank auditors who are supposed to know banking. Shouldn’t this have been obvious them?

And so I’m thinking, isn’t this our problem in a nutshell? Who the hell knows what’s going on behind closed doors at large financial institutions. If a bank auditor can’t work out a simple thing like a fully indexed rate, how can they tell when somebody is trying to pull a fast one? These are the people who I let keep my money? Maybe I’d be better sticking it under the mattress.