CQRS stands for "Command Query Responsibility Segregation". The idea is an extension of the single responsibility principle applied to services:
Command and Query are responsibilities of a system. By single responsibility principle, each of these responsibilities should be separate in the system.
"How tho?" As with all design principles: giving the definition does not teach how to apply the principle. :)
There are a lot of technologies that enable CQRS and these are worth an overview. I want to focus on the conceptual and logical first. The critical aspect of segregating command and query is useful even in design.
For instance, a useful question: "Does this change the state of the system?". This likely resembles asking about purity to functional programmers. Yep, same idea :) Just applied early and often in the design. We should aim for a clear answer: Yes or no. If there isn't a clear answer then that likely indicates a poor separation of command and query.
Is this an interesting topic for anybody else?