Flexible systems are not always good

Yes, I am talking here about the big problem over at DreamHost today , where just about every customer of theirs got billed incorrectly. The reason? Their billing application, which has been designed to be as fail-safe as possible, had been implemented in such a way that it was possible to re-bill customers as if today were a day in the future manually.

Usually their billing and re-billing happens automatically, but over the past weeks some issues arose with recently-upgraded servers, due to 64-bit incompatibility. After fixing this, one of the DreamHost engineers decided to manually re-bill the past three weeks, except he forgot to change the 2008 to 2007 when he switched to december. Result: Nearly all of the DreamHost customers got invoiced as if today was december 31st 2008, and those that had automatic charging turned on even got charged for this! Several accounts also automatically got suspended because they hadn't paid for too long!

Now, there is no situation possible that I can think of in which you would want to manually re-bill clients from a future date. None at all. But I guess this wasn't spec-ed in too much detail and the developer who made this thought "let's make it flexible". Obviously, it's also the fault of the engineer doing the manual runs, but the original developer is as much at fault here in my humble opinion. Aside from using your head for the code you're writing, also use your head to think about the functionality you're giving to your users.

Luckily, as a post on their weblog shows, it seems they learned their lesson. Now, all of us developers should take up a lesson from this as well. Don't just think about your code, also consider the power you are giving to your users!