I wonder if the term ‘exception’ in computer programming should be renamed. Both the name, and the way that exceptions are treated in typical programming languages, seem to relegate exception handling to a lower status. But really, in a lot of cases, good systems can become great ones via well-designed exception handling.
I recently moved. Long before I did, I placed a pre-order on Amazon. When it came about time to ship the item, Amazon sent me a mail saying “The address on this order is no longer in your address book, are you sure you want to ship it there, or do you want to use another address?”.
Having sorta implemented an e-commerce system, and having pondered them to varying degrees over the years, I never really thought of the “customer moved between when the order was placed and when it shipped” case. I’d be willing to bet that many e-commerce solutions out there don’t very adequately handle that ‘exception’. But I’m glad Amazon’s does.