There are projects where you can use some of the nicer ways of doing audit. And then there are some codebases where that’s not possible without major and painful refactoring. Luckily, there’s a clean, manual way of doing audit as well.

2. Technical

Data is of course the most complex part of doing Microservices well, and in my experience, the number one reason teams fail during these kinds of implementations.

It turns out that, for example – getting transactional boundaries right across multiple systems is a hard problem to solve, especially without a very good understanding of the semantics to achieve in the system and a clear set of self-imposed limitations at the start.