Start here. This is the direct spoken answer to practice first.
Why this question matters
CQRS separates models for changing state from models for reading it. It does not automatically require separate services, databases, a message bus, or event sourcing.
I consider CQRS when writes enforce rich invariants but reads need very different shapes, joins, filtering, or scaling. Commands express intent and return an outcome, while queries return purpose-built read models without mutating state. In a modest application both sides can share one database and transaction technology. That lightweight separation can improve clarity without introducing distributed consistency.