(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Thursday, September 20, 2007
  You suck

There’s a childish thing bloggers do. They get angry about something that pisses them off, and they vent. They know, deep in their hearts, that whining about stuff when they could be out there making positive change is not constructive. And they especially know that lashing out in public is not constructive criticism, it’s just throwing a digital temper tantrum.

But the primitive, reptilian part of their brain—the one that was in charge when they were two years old—takes control of the keyboard and off they go. After a few paragraphs of pointing out how arrogant Apple has become, or how much Vista sucks tbng qvpx, they calm down and realize how childish the post is.

But do they round file their post? No, in a fit of hubris they try to dress it up in serious clothing by inserting a few absolutely ridiculous suggestions like “Use one field for entering a name,” or “Apple should license PlaysForSure.”

That way, they can pass their rant off as some kind of wise observation from someone who “gets it.” Well, I’m a dad with a two-year old, and believe me, I get the point of these posts. It’s just plain people pissed providing a paucity of pertinent points. They’re mad as hell, but you and I both know that they are going to take it some more.

None of this, of course, stops me from doing exactly the same thing. But a little self-awareness goes a long way: I’m not going to waste your time pretending to be a nice guy trying to help someone correct their mistakes, or suggest that I’m a smart guy who knows better, or even that I’m trying to share some knowledge with you so that you can be a better programmer.

Nope. This is just a rant. Unadulterated bile.

You suck

You suck. Yes, you, Mister Web Application Engineer or whatever puffery is printed on your business card in lieu of “Whipping Boy.” If I was in a good mood, I might say that you’re a fine human being, and it’s just your work that sucks. And that you can’t help it, there are deadlines and bad managers and clients who buy lemons and all sorts of excuse for the crap you ship. But I’m not in a good mood.

I’m not in a good mood because I should be in New York right now. Do you know why I’m not in New York right now? Because the company you work for—a travel agency—didn’t email me my e-ticket in time for me to get on my flight. Why not? Well, it seems I made the mistake of giving you a valid but unusual email address, invective+travel@gmail.com, and your software did something stupid.

Now, we both know that it is very hard to validate email addresses properly. Had you thought it was invalid and not let me enter it on the web in the first place, you would still suck, but I would be telling you that you suck from NYC. But instead, you let me enter it. You even sent a confirmation email telling me that you were processing my order to that email address! But I guess you have different systems, with different logic, and the system that was supposed to actually send my e-ticket mangled things and emailed it to invectivetravel@gmail.com instead. No +. So nobody even knew anything was amiss! No error, nothing, just sending it to the wrong place. And it probably bounced, but you didn’t tell any of your customer service people, so nobody knew there was a problem until it was too late.

Well, my situation sucks, but at least I don’t suck. You do. This email mangling isn’t a bug. It’s a place where you thought you knew what a valid email was, and you added extra code to block “invalid” characters. Had you simply schlepped strings around like they did in the days of COBOL, all would be well. But that wasn’t good enough for you, you had to actually burn your employer’s money making your software worse.

I’ve seen your work before. My legal surname for many years was “Braithwaite-Lee.” Note the hyphen. In your infinite wisdom, you have built many web systems that told me that “-” is an illegal character in a name field. You are an idiot, what makes you think you know anything at all about what kinds of characters people are going to want to put in their names?

A name is the most personal thing people are going to give you, and here you are “validating” it. I would point out the irony of a medium invented by Tim Berners-Lee rejecting surnames with hyphens, but I know for a fact you just got the job because you aren’t qualified to do anything else, so you have no knowledge whatsoever of our industry’s history.

I find this “validation” especially irritating when ordering something online and trying to pay with my credit card. What excuse, other than the fact that you suck, can you give for telling me that the name “REGINALD BRAITHWAITE-LEE” was an invalid credit card name, when that’s exactly what was printed on my credit card? I mean, besides the fact that you’re wrong, why were you trying to guess that someone else’s computer accepts or rejects? Just ask them, oaf. The bank will tell you if the name is invalid.

This is a basic tenet of your suckage. You are not lazy in any enlightened, useful way: you make work for yourself under the guise of making things easier or of strutting around your office bragging about the latest shiny enterprise bauble. Most of the problems you have to solve arose because you made choices that suck.

Your credit card name validation sucks. Why? because it tries to save a round trip to the bank when a customer mis-types what is written on their own credit card. Does it always do so? No, of course not, I can merrily put my name down as “STUPID OAF,” and you don’t care. Your little check just takes care of one corner case, gets it wrong, and encumbers your code with broken dreck, just like the email crapfest.

And that’s why you suck.

Comments on “You suck:
I've been developing web apps for over 10 years and I agree with you 100%!

The types of validation you mention are worthless. I can't even count how many times I enter an email address of foo@bar.com because I am forced to enter a "valid" email address.
Beautifully rant... err stated. Another of my own favorite web form fields from the land of stupid: phone numbers (they either demand ()- or demands not using ()-). And is it that hard to run a feckin' trim on all the fields you accept, so I don't continue typing 'myname' when it was stored as ' myname'. Your bleepin password reminder email says it should be 'myname' because the email html team apparently knows about trim. But they suck too.
I once tried to help someone with a hyphenated first name order video rentals online. If we did it with the hyphen, we got an "invalid character" error. If we did it without the hyphen, we got a "wrong name" error.

Then the form to ask for support silently dropped digits from the phone number if we added parentheses and dashes.
I have this same problem sometimes. I live in a postal district which doesn't deliver mail to my house, so I have a PO Box. Hence, if my residence address is ever validated against the postal address database, it fails because I'm not in the postal database. Awesome.
Hyphenated Parable
Similarly related registration WTFs: password fields which have a *maximum* number of characters or *reject passwords that use non-alphanumeric characters*... You seriously want people to weaken their strong passwords? What kind of idiot makes that decision?
Well the same person who sucks also wrote the airline check in software that "validates" your children's age against BAA safety rules. I have twins, guess what sucky person? They have the same birthday! Guess why we were the last people on the plane after being the first person in line while a parade of unsuspecting ground crew couldn't figure out why they weren't "allowed" to print a boarding card... Have you ever hung out at the check in desk with two one-year-olds for over an hour?
Nice. I always love a good rant :)
Amen, brother.
My phone number is 5 digits long (excluding area code).

Many web apps believe a phone number has to be at least 6 digits: they end up forcing me to give them a meaningless phone number!
Ah, this is old news to any Irish person. Consider this: valid Irish addresses can be two lines long (town and county) and we don't use postcode of any kind (except for postal districts in Dublin). We have names with all sorts of funky characters (such as apostrophes and acute accents). Good times, good times...
My heart goes out to readers whose names have special characters (I consider it a travesty when a Canadian business has trouble with French accents or an American business has trouble with Spanish accents).

I know this is subtle, but many of those issues actually apply to my other blog post bemoaning how much software sucks.

The idea there was that programmers are not keeping up with the times and failing to add new features that users need.

And I cut the programmers some slack over that, I realize that the environment makes it hard to make software that doesn't suck.

However, this post is not about failing to add important features, it's about willfully adding mis-features that suck.

So for example, if a web application is written in a language that handles accented strings and connects to a database that has a data type for accented strings, but the programmer "validates" your name and rejects them, the programmer sucks.

If your postal service is happy to deliver a parcel to you by name and town alone, but the web application demands a street address, the programmer sucks. He did not have to zealously add all sorts of validation like some sort of power-monger ("I make the rules!" "I enforce the rules!!" "The users shall bow down before me!!!").

In contrast, if the web application demands an SSN and insists on breaking it into three fields, making it inconvenient but possible to enter a valid SSN, I will accept that the programmer might not suck and it is only her work that sucks.
Wait...you've got an email address with a "+" in it? OK, you DO suck.

Let's not forget that nice Korean man Mr. O.

Even worse, I have read, are systems that don't even allow THREE CHARACTER surnames.

I'm sure Ms. Hay, Mr. Kay, and of course the author of the Star Spangled Banner, Francis Scott Key, are not pleased.

How about people with only one name. I knew someone like that. He finally gave up and adopted his given name as a surname as well.

And how about sites that don't let you put spaces in your credit card number. That's the easiest way to avoid errors, including the spaces.

Don't worry, I suck too, but it's still irritating.
David, don't be a wang. On gmail, and any email system worth the electricity to run it, you can use use foo+bar@baz.com and it will get delivered as if you used foo@baz.com.

The +bar is for the benefit of filters that you can write, and help you trace who sells your email address. If it gets loose on the spam lists, you blacklist it.

I endure this kind of idiotic suckage several times a week. I'm one of those terrorists with a space in their name.

Stephen van Egmond
Here in the UK there's a list of (in theory) all of the postcodes in the country available as a database, and it's possible to look up a street name and town just by supplying the postcode. So that's what websites do: ask for the postcode then for the house number/name within the street.

The problems arise when that's the only way to enter your address, and the database that the service is using is out of date (either that the master database is wrong or hasn't yet been updated for a new or newly divided house, or that the site's copy is old). It then becomes impossible to enter your right address. I've had it 'autocorrected' a number of times!

This caused problems with TV licensing when I bought a new TV using the address on my credit card, subtly different from the address on record for my existing licence. See the whole sordid tale. I really enjoy being chased by enforcement for something I already have.
Haha, nice! I never really did understand why they made the programs to not accept the -()* and so on.

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /