Write to the system via commands that produce events in the event store (source of truth), and read from projections continuously built in a relational, graph, or document database. This split gives enormous freedom (different read stores per use case, regeneration of read models) at the cost of eventual consistency, which is usually acceptable.