I work as a contractor designing microservice arches on AWS. When I talk with my clients' developers about splitting their app into microservices, I ask them to use this abridged Unix Philosphy to draw borders:<p>1. Make each service do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features.<p>2. Expect the output of every service to become the input to another. Don't clutter output with extraneous information.<p>3. Data structures, not algorithms, are central to complicated systems. The more universal you APIs, the easier to add new services later.<p>You can also compare this to functional programming: imagine each microservice is a stateless function for manipulating you data and outputting the result.