I use callbacks (after_save, etc.) extensively to rebuild model relationships. However, there are times when I don't want them to execute, and I don't want the caller to know about it. For example, if I have a model object with saved search criteria and tags, I want to execute the search when the criteria changes but not when the tags change. In the end, all I really need to know is what attributes changed. I have a scheme involving overriding =, but it doesn't always work (update_attributes doesn't use obj.attr = new_value, for example).