Defensive design cost-benefit analysis, courtesy of Wells Fargo

The short version: Learn to use the TRIM() command in whatever programming language you’re using, so you remove spaces that some poor soul accidentally includes in a data they enter via web form.

The TRIM() command

Every programming language has some version of the TRIM() command. TRIM() removes leading and trailing spaces from any alphanumeric string. So, if you type ‘ blah blah blah ‘, TRIM(‘ blah blah blah ‘) ends up being ‘blah blah blah’.

Use that any time you’re processing data from a web form. It’s good defensive design. And, as it turns out, it costs a whopping $.75 to do it.

That’s the whole lesson. You’re done.

If you want to read the long version, with narration and cost-benefit analysis, though, here you go:

I love Wells Fargo Bank

I love Wells Fargo Bank. In Bizarro world I do, anyway. Actually, I hate them with a passion normally reserved for cat- and puppy-beaters. That’s a long story with which I shall not bore you.

But now and then you can learn something from them, like how not to create a usable web site.

My story begins

Today, I logged on to their web site to pay off my company’s line of credit. It’s a monthly ritual that now strikes fear in my heart, since you never know when you’ll pay off said line only to have some demon at the bank say Oh, you paid it off? That’s great! As a thank you, we’re going to reduce your available credit by 75%. You’re welcome.

But I digress.

I logged in. Their ‘Accounts’ screen shows you balances on credit cards, lines of credit, etc.. If you go to the ‘Transfer’ screen to pay them off, they don’t show those balances. So you have to either memorize them, or copy-and-paste.

No, that’s not the usability snafu I’m writing about here – it’s just the groundwork.

So, I copied the balance, went to the Transfer screen and pasted the balance. Then I clicked ‘Transfer’, and got this dire warning:

I looked at my number. Hmmm. It has a dollar sign, so I deleted it and clicked Transfer again.

Same mysterious error.

I double-checked that I was paying off the right amount, which required that I go back to the accounts screen, then start the transfer over again. I was indeed.

At this point, I start to wonder the amount is ‘invalid’ because it pays the line off in full, and Wells Fargo would like a little interest, thank you very much.

Finally, I realize that my copy-and-paste had included a space at the end. So instead of $999.99 I had pasted in $999.99_ where the ‘_’ is a space.

I deleted the space, and it worked.

Cost-benefit analysis

I wonder how many calls Wells Fargo has received because some poor bugger left a space in a transfer amount?

Let’s do a little math, shall we?

If they get, say, 10,000 people per day using online banking (probably a small number) and of those people, 5% do balance transfers, that’s 500 transfers per day.

If 1% of those people include a space at the end of their transfer amount, because they copy-and-paste, that’s 5 frustrated customer every day.

If those customers call the bank for help (assuming they can reach someone), and they take an average of 10 minutes per call, that’s 50 minutes per day for some customer support person. Having talked to Wells Fargo support, I know they use some pretty cool people, actually – once they drive you crazy they let you talk to a human being – and they’re paying US wages, so figure $27,000/year at the low end.

Total cost of crappy defensive design? $10/day, roughly, or $3600/year.

Total time required to add a TRIM() command in whatever programming language Wells Fargo uses? 60 seconds, if you type really slow.

Assuming Wells Fargo is using highly paid developers who get $90,000/year to drive me insane, total cost of using TRIM() is $.75.

I could have saved you guys $3599.25. You could have used that to, I dunno, get me an anger management counselor after you tried to turf my company. But cash works.

CEO

Ian Lurie is CEO and founder of Portent Inc. He's recorded training for Lynda.com, writes regularly for the Portent Blog and has been published on AllThingsD, Forbes.com and TechCrunch. Ian speaks at conferences around the world, including SearchLove, MozCon, SIC and ad:Tech. Follow him on Twitter at portentint. He also just published a book about strategy for services businesses: One Trick Ponies Get Shot, available on Kindle. Read More

8 Comments

This kind of stuff annoys me to the limit too. Every time I see a piece of half-ass programming job I know that someone just didn’t put enough effort into it. The problem is that you don’t know what you don’t know. If a programmer is not aware of such a function then they simply won’t use it. What a pity.

Alan Sep 4 2010, 10:51:02

Hey Ian Great article, but are any US banks any better? I am pretty shocked at the state of internet banking in the USA! I’m with Bank of America and I have fared no better with them or their internet banking systems. It’s a completely different dynamic but in South Africa, where I’m from, internet banking is easily 15 years ahead of the US. There are much fewer banks per capita, and so they can afford more in-house development and competition is national. I handle all my SA accounts effortlessly from here, it’s secure and super easy to use: I can add new payment beneficiaries from any other bank – payments are processes within 4 days, immediatelly if it’s withing he same bank. I set my own limits, cell phone companies can even receive funds for a client, so I can send a payment to a cell phone number. I don’t remember when I last wrote a check in South Africa, maybe 10 years ago. Checks are not only unsafe, they are also just about redundant. I keep thinking how many man hours are wasted in the US writing, posting, collecting, depositing and manually processing check payments. Why? The secure technology is all in place to automate that whole process!

Clint Sep 4 2010, 12:42:46

Usability issues like that drive me crazy too, but you’re seriously underestimating the cost to change the production code. With a big corporation like Wells Fargo – and especially when dealing with online banking – a programmer can’t just take a couple of minutes to go fix a bug. Instead, someone has to create a defect in a tracking system and prioritize it. If – big if – it is prioritized high enough, it probably gets lumped in with a bunch of other changes to be worked on. A project manager is assigned and spends days setting up a project plan, creating PM docs, finding resources, etc. A tech lead then is brought up to speed on the project and delegates the actual work to offshore developers. Once they’ve made the changes, they go through their basic functional testing. The tech leads then reviews the code, a QA team checks it for defects (and you go back through the cycle again if any are found), and you end up installing and validating in dev, test, and cert. A business area may do UAT, infrastructure teams perform any relevant reviews, performance tests are done, and then you get to schedule it for the live production site. That has to scheduled in advance and likely at some designated time like Saturday night, and it takes days to create the change documentation and get all of the necessary approvals. It might take weeks to fix this little bug, but none of the programmers want the hassle, so it doesn’t get done. So it’s going to still be there to drive you crazy. :)

As someone who spent a couple years specializing in new web site QA, I see crap like this a lot. There’s so many other similar things that intelligent web developers should do as a routine, that it makes my head spin. Here’s one – if you provide a field for a web address, even if you specify whether the http portion is required or not, you should check to see if it’s included. That way people don’t end up clicking on links that result in 404 errors when the system tries to send them to a page on the current site that ends in http://www.otherdomain.com That happens a lot and it’s stupid. Sadly, most code monkeys are so caught up in their own minds that they fail to consider these issues. Sure, we can call it idiot-proofing. Yet just because the dev thinks it’s common sense to do something exactly how they intend you to, does not mean they are right in that assumption. Not only are we talking about additional wasted support calls and email, what about the throngs who just get annoyed and bail out?

I wonder how long this has been a problem or how long it will take to fix. Usability!! no one seems to care about it but I shudder to think the money companies could save if they invested in it properly in the development stage of websites…

Great post! I thought the usability on the American Express Membership Rewards section was bad… (I’ve had to resort to memorizing where to go to redeem points because the language AND the layout is overwhelming, and convoluted!) That was, until I tried moving points w/my husband’s ancient Diner’s Club card. Every time you click a button a new window opens but you’re no closer to accomplishing your goal. No wonder Citi is in the toilet. Their system is so antiquated. You almost gotta see it to believe it.

James Sep 9 2010, 14:32:36

Hi Ian, my name is James and I work for the Wells Fargo Social Web and Customer Loyalty team. I apologize for your frustrating experience and appreciate your feedback. I’ve shared your input with our technical group, who is currently working on enhancing this experience. Thanks for sharing and feel free to email me at socialwebteam@wellsfargo.com if you have other feedback, questions or issues.

Comments are closed.

Stay up to date.

Thanks! You have been successfully opted in.

Receive valuable, in-depth and strategic advice.

Sign up to receive our posts via email!

By clicking submit you are agreeing to our terms and conditions and privacy policy.