A key characteristic of sending messages is how reliably these messages arrive. In order to have optimistic locking, the system needs to be strongly consistent — so that at the time of the operation, we can check if another operation has been initiated, using some sort of versioning. To run the code, all you have to do is issue a transaction with a smart contract as its destination. With a few simple rules, complex, distributed systems can be described well, which can also repair themselves, after an actor crashes. Horizontal scaling becomes much cheaper after a certain threshold It is significantly cheaper than vertical scaling after a certain threshold but that is not its main case for preference. When building large, distributed systems, the goal is usually to make them resilient, elastic and scalable.