Domain-driven design focuses on dividing systems by business domains and bounded contexts, which helps create services aligned with real-world business capabilities.
Decomposing by business capabilities isolates payment processing as its own service, which improves maintainability and scalability.
Using separate databases per service leads to challenges in maintaining data consistency because distributed transactions are complex and often avoided.
Fine-grained services lead to more network calls and higher operational complexity, while coarse-grained services reduce calls but may be less flexible.
Multiplying 5 bounded contexts by 3 services each results in 15 total microservices.
