The hard parts are trade-off analyses, not recipes: disintegrators vs integrators for service and data granularity, and the distributed data and transactions that decomposition forces you to confront.
Never chase smallness. List the disintegrator forces pushing a service or database apart and the integrator forces holding it together, then decide which dominate for this context. When a split breaks an ACID transaction, replace it with a saga and eventual consistency, and settle data ownership so coupling does not just move into runtime calls.
The hard parts are trade-off analyses, not recipes: disintegrators vs integrators for service and data granularity, and the distributed data and transactions that decomposition forces you to confront.
Never chase smallness. List the disintegrator forces pushing a service or database apart and the integrator forces holding it together, then decide which dominate for this context. When a split breaks an ACID transaction, replace it with a saga and eventual consistency, and settle data ownership so coupling does not just move into runtime calls.