During my undergrad Database course, our professor explained atomicity of transactions with the very trivial example of withdrawing cash from ATM machines: either your whole transaction should fail or it should completely succeed. It means your account balance should not change unless you have got your money, and if you have received the cash your account balance should have also decreased.
Unfortunately some of the people who actually design ATM machines have not passed this course it seems. Last Wednesday I withdrew some cash from an ordinary ATM, and the machine failed to return my cash. But my account balance was reduced! The machine actually was able to tell me that it had failed and the operation was canceled, but it seems it forgot to tell its friends back in the Wells Fargo network to cancel the operation. I had to call the customer service a couple of times to get my money back.
There is no conclusion from this post. It just surprised me that a simple basic idea we are taught in classes is not actually implemented in real life.
UPDATE: My old friend Pooya asked in the comments if the ATM in question was a Diebold ATM. Diebold is the company that also makes voting machines in US. Next time I was in Student Union I checked the ATM, and guess what: it is a Diebold ATM! I now have some serious questions in my mind!
I should mention that Wells Fargo checking people were very nice and quick and solved my issue by a couple of phone calls.