The order in which service add and update methods are implemented have not been standardized so far. This leads to confusion as to the order in which events are fired (which affects how listeners work).
For example, if Expando attributes are stored AFTER the model is updated, then model listeners will never have access to those expando attributes. See
The method updateStatus also requires that certain logic happen when a workflow piece is updated. When should a social activity be logged? (ie only when a model is approved).
When should email be sent? Only after everything is persisted. You should never send an email if there is still a possibility the rest of the method can choke because of a rollback.
The new standard should therefore be:
expando, model, resource, portal package, local package, other package, indexer, status, file, email / subscribers, ping
model, resource, portal package, local package, other package (expando is in here) indexer, status, file, email / subscribers, ping