Interactions in our system happen through a RabbitMq backbone. Our communication platform is built out of 8 microservices with each of them performing a very specific task. Any communication to be sent out has few steps to be followed beforehand. A campaign has to be created for the communication and the templates to be sent, have to be attached to it. We provide a user interface for doing these operations. While defining the campaign, the user can tell whether this campaign will be event based or schedule based. Event based communication triggers when a certain event is fired in the system and is received by the communication platform. User information has to be part of this event. In case of schedule based communication, the user just tells when he/she wants the communication to go out. This schedule can be a one time trigger or a cron. In addition to that, the user provides a way to retrieve user information. An external aggregation system(Grand Maester) has been built for this very purpose. As do not want different teams to collect user information about users that they don’t own, we built a central aggregation service. All teams can come and register their APIs here, which can be used to retrieve user info dynamically. This system will also help us filter, slice and dice around users without each team independently implementing them.