Q: How do I manage common data when creating microservices Im refactoring a monolith to microservies. I am not clear on data responsibility and access with microservices. From what I read we should take vertical slices.
So each service should be responsible for its own UI/WebAPI/DB, with distinct responsibility.
For example if I had a monolith shopping cart app, I could break it into the following services:


*

*CustomerAccount

*ProductSearch 

*ProductMaintenance

*ShoppingCart

*Ordering


What do I do with shared data, how do I determine what part of the system is responsible for it? 
e.g. In my shopping cart example...


*

*The CustomerAccount, ShoppingCart and Ordering need to know about the Customer data.

*The ProductSearch, ProductMaintenance, ShoppingCart and Ordering need to know about Product Data data. 

*The Ordering will update the number of products available, but so should the productMaintenance.


So should the services send messages back and forth to get data from one another, 
or should there be a master service, which handles the communication/workflow between services
or should they read/write from a common database
or something else?

A: This seem little late to answer but it may be good for future use.
Microservice calling another Microservice is totally fine, what you should be aware of is in case the communication between Microservices becomes to chatty  than you should look at a different solution(maybe duplication of data across services, or have it with in same service).
In your case I would build a separate services for each entity that you call for common and reevaluate the situation afterwards.
Hope this helps 
Best regrads
Burim
