Building distributed systems is fundamentally different from the synchronous
world many developers are used to. Using messaging as communication and
eventually consistent persistence introduce several pitfalls which might be hard
to foresee. Moving applications to the cloud, as a general rule, removes
transactions in its traditional form and new problems