decoupled persistence from execution