I know, I know, it is easy to nitpick on other people design, but this morning I tried to pay my phone bill online, and... failed. I had to retry many times, because I kept making mistakes on a simple, run-of-the-mill form to enter my credit card data. I was dumbfounded. How can, in 2009, people manage to make such a trivial and essential part of online business go so wrong? As I guess you are as curious as me, here is what I found out:
(See the picture for the 3 main pain points)
- 1 the expiration date example is ambiguous: does
0903 here means 2009-03 or 2003-09 ? Why didnt they disambiguate it by also adding a specification (like MMYY, or, as it is a french dialog, MMAA ?)
- 2 but today, it was not only ambiguous but plainly misleading! As we were in March 2009, I assumed that the example was built from the current month and year. I said cool, so it is YYMM. Wrong! it was actually the reverse, MMYY, resulting in one failed attempt
- 3 ok, I filled the fields, and hit the OK button... and it just reset the page to empty fields! Grumbling, I re-typed the fields, re-clic, and... another blank page! After these two more failures, I tried to think (which is what you http://en.wikipedia.org/wiki/Don't_Make_Me_Think do not want your users to do, trust me!). I then read the button label and discovered that this big, prominent button alone at the bottom of the page was not the Submit button but the Cancel one!. I should have hit the middle one "Valider", but this button was not in the correct place on the flow of the form.
So,after 3 failed attempts, I managed to pay my bill. All this on a simple form with no fancy verification code or Captcha. Well done Telefact, I wonder if you can find a worse example still in use today.
I stumbled upon the blog post "Is it important to write good code?
" the other day, and became more and more ill at ease as I realized that I thought that I preferred the original code, that the author was trying to ridicule, over his new "improved" object-oriented version. At first I guessed this was another manifestation of the the "Worst is best" scenario - enhancements are often not worth the added complexity - but I realized that it was perhaps a more profound factor:
The original code is very good because it ... is small
!. It fits on a teminal screen, so an human being can read
it at once and have less items to maintain in his http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two short term memory
and also understand
it easily because it follows a natural way of thinking with sentences using IF
. This becomes obvious by reading the body of the blog post surrounding the code samples, where you can see that the author is using phrases such as "if I need this I do that", showing that in plain english, the if statement is the best way to make people understand what you mean. And making code that people
understand is the best way to make debuggable and maintainable code.
At this moment I noticed the citation in the blog header: "Good programmers write code that humans can understand"
PS: I know I am a bit exaggerating the issues there, and that I unfairly nitpick on Fredrik Normé, but it is that it seems to me from my personal experience that the two changes I see most in my coding efficiency as I grow older is a decrease of my short term memory capacity, and that I make more and more typos where I realize I mix up totally words with totally different meanings but that sound the same, for instance writing "never" instead of "nether", making me suspect that our natural way of thinking may be much more language-based that I imagined...