Services communicate via asynchronous messages in two flavors. Events are past-tense JSON messages with a type (e.g. 'pen dropped') representing facts that happened — they cannot be argued with. Commands are imperative (e.g. 'drop pen') expressing intent that a service may accept or reject. System designers pick the types; they are just strings with data payloads. In an event-sourced model, the stream of events literally becomes the state of the system — rather than storing 'pen #1 is picked up', the system stores the sequence: dropped, picked up.