Every little piece is easy/easier to test, but testing end-to-end over multiple micro-apps is hard in my experience.
also, it makes failures hurt less, and rollbacks much easier.
The other halves: distributed logging (how do you trace a 'transaction' that is being executed against multimachines/multiplaths?)
What about rolling releases? what about versioning?
What about service discovery (still immature field, look at how many products/tools out there trying to be THE service discovery choice).
We solved the service discovery problem by simply using DNS. Every service runs behind an (internal) Elastic Load Balancer, and we let the load balancer configuration figure out which instance is up and which one is down. Again, not the perfect solution, but it works great for now and is very easy to setup/maintain.