Lessons Learned Building Distributed Systems with CQRS and Event Sourcing