I am reading Vaughn Vernon's series of articles about effective aggregate design.
On the subject of deciding between transactional vs eventual consistency, it states the following:
Discussing this with Eric Evans revealed a very simple and sound guideline. When examining the use case (or story), ask whether it's the job of the user executing the use case to make the data consistent. If it is, try to make it transactionally consistent, but only by adhering to the other rules of aggregate. If it is another user's job, or the job of the system, allow it to be eventually consistent. That bit of wisdom not only provides a convenient tie breaker, it helps us gain a deeper understanding of our domain. It exposes the real system invariants: the ones that must be kept transactionally consistent. That understanding is much more valuable than defaulting to a technical leaning.
This advice confuses me. Large parts of the software that I've written in my career were useful to the end user because it freed them from the responsibility of keeping data consistent. As a result of this, users expect to observe a consistent state all the time, without delay. To a customer paying for a consistency-achieving software, every inconsistent state observed is a bug.
In my experience, when submitting a request, users would usually rather wait a bit and observe a consistent state than have an immediate answer that is changed later on in order to be consistent.
Inversely, when it is the user's responsibility to achieve consistency, our system would warn him about inconsistencies, but allow him to eventually achieve consistency by executing several smaller commands, instead of requiring the user to do so with one giant command.
Why are Evans and Vernon recommending eventual consistency when it is the system's job to get consistency right and transactional consistency when it's the user's responsibility?
Could you point out example constraints and use-cases where transactional or eventual consistency are considered suitable according to the above rule?