When do you choose microservices over a monolith, and how do you manage the resulting complexity in data consistency and network latency?