An event is a point in time.
An event can be hooked:
On
Before
After
An event specifies when it can be hooked; e.g. only On
, only Before
, only After
or a combination of these.
An event is Serializable (to JSON).
An event should be "small"; i.e. limit serialized payload size; it should contain references (identifiers) so that the extra data can be retrieved with an extra method call.
For instance an event may contain an identifier to a result instead of the result. If the listener needs the entire result, it will send a request for that result identifier.