What are microservices and what are their benefits and downsides? How can we take advantage of microservices to address today's business needs and what design approach should software developers undertake?