Microservices are becoming a popular paradigm in software engineering, but without much specific definition. The idea sounds compelling on paper and can provide real advantages for separation of concerns, system availability, and enabling devops practices. However, microservices come with a set of foundational challenges that must be addressed in order to realise those benefits; first and foremost, what do we mean by "microservices" in the first place? In this talk, I present what we have found to be an effective definition of microservices architecture and requirements for an practical implementation.