I'm developing a micro (or macro) service architecture. Due to small team size, instead of breaking down to complete small microservices, some services are slightly larger but still well bounded from a domain design perspective. We are now busy implementing a service that is responsible for user analytics and being able to create lists of user segments based on these analytics. These segments can then trigger actions in the application such as unlocking content in the CMS microservice, etc.
My pain here is that this user segment service is now in a situation that it has to be "aware" of many other services to perform these actions which feels like an anti-pattern and leans towards a distributed monolith design. Biggest loss on this approach is now other servicses are tightly coupled to this service and cant be updated without testing / updating this user list service itself first.
I can implement and do use asynchronous communication using protobufs as the message type (not GRPC as lambda doesn't support this). I get that this is better than syncrhonous communications because of possible time out issues, etc. but is that really all I can do to reduce coupling? Or am I missing some critical service design thinking.
HELP!