Distributed systems are hard.
Most of us have used a website to buy a product. You might have seen a purchase page that contains a warning do not click submit twice! Maybe you’ve used a site that simply disables the buy button after you click it. The authors of that site have run up against one of the hard problems of distributed systems and did not know how to solve it. They abdicated the responsibility of preventing duplicate charges to the consumer.
Maybe you’ve used a mobile application on a train. The train enters a tunnel just as you save some data. The mobile app spins ...