How we ended up with microservices