Another important factor in scoping out services is dependencies and the coupling a service introduces. Dependencies in microservices have to be evaluated to make sure that tight coupling is not introduced in the system. To avoid a high-coupled system, decompose the system into business/technical/functional capabilities and create a functional dependency tree. Having too many request-response calls, cyclical dependencies, and so on are some of the factors that may break a microservice. Another important aspect in designing robust microservices is to have event-driven architecture; that is, instead of waiting for a response, a microservice should react upon receiving an event.