As a developer, it’s tempting to believe that you know more than your users. Resist the temptation. You usually don’t. And in many of the cases that you do, your knowledge now is not going to exceed their knowledge later. Case in point, input validation. You may know more about legal values now, but what you code today may not apply forever.
I first encountered this several years back when I was a customer of PayMyBills (now Paytrust). I was in my bi-coastal phase, and I was using PayMyBills to view and pay my bills online. Then PayMyBills established a new payment center, with a new zip code. Unfortunately, some clever person at Sprint PCS decided to validate zip codes. With no way to override the validation, even with an irate customer insisting that the zip code was correct. The problem was compounded because the system discarded the old address before validating the new, and I had forgotten the old address.
I just encountered it again. I was going to switch my cell phone plan to Cingular. And I was going to buy my phone from Amazon, who offer some impressive rebates on new phones. Unfortunately, someone decided that they knew all the legal street types (Avenue, Boulevard, …) in the United States. And that someone decided to enforce that knowledge on all potential Cingular customers at Amazon. And that happens to make it impossible for me to enter my correct billing address. So much for that purchase.