One more law about core data, don't edit objects until you're ready to commit them, and build a design pattern for other devs to copy that enforces this rule. In theory this is what parent child contexts are supposed to be used for, but the problem is that relationships break once an object is moved into a child context, so you end up with bigger headaches of gradually moving more and more dependent objects into the child context. If you forgo child context and still do edit in place, you're constantly playing whack-a-mole with data corruption as you or other devs forget to rollback data when a user cancels out of a flow.