Some very good thinking in this article. The author takes some serious steps toward defining effective microservices architectural constraints. My only substantive criticism relates to Decision 1: Handling no shared database(s). The problem space being addressed by microservices does not always lend itself to this constraint. Constraints are useful in architectures only when they facilitate meeting the resulting application’s functional requirements. My team is working toward isolating databases in their own services while still supporting horizontal scaling through asynchronous multi-database synchronization. The author’s Option 2: Use Compensation and other lesser Guarantees is fundamental to the approach we’re taking to achieve rapidly eventual consistency without distributed transactions.