What are the advantages to storing commands in a CQRS/ES system?

  1. Regression testing After every dev iteration you can grab command log from production environment, re-execute it and compare event stream produced with one on production. If they different - you have regression in your logic.

  2. Message flow visualization and analysis.


The examples of Cqrs that i've seen without event sourcing are usual relational databases that store the state of the system rather than Events which show how the state of the data came about. "Command sourcing" is a new concept for me and doesn't seem right since command handlers can change over time. Any changes to the command handlers logic would probably result in commands failing when replayed. Replaying events doesn't have this problem since your objects properties are directly set.