We, as humans, are driven to understand and explain. Thus, we abstract. We extract commonness (all mammals have fur) and split distinctions (many shades of red). However, abstractions are models. When working with models, we tend to want to make the models complete and self-consistent. In other words, after the first cut, we often add to a model for the sake of the model. Since, as someone here recently noted, all models are wrong (though most are useful), extra modeling has the risk of being wrong and not useful. Therefore
AbstractWithGoalInMind. Before abstracting, know why you are abstracting, so you know when you are done. If you have no clear goal, or only a few observations, ExperienceWithoutAbstraction. If you are doing engineering (working on a task), abstract only enough to complete the task.
If you are doing science (trying to explain or understand something) then the completion criterion is harder to pin down. We are tempted to try to understand everything. Instead, try to pre-define what you are trying to understand or explain. When you get a warm feeling that you have accomplished this, stop abstracting.
"Abstract" means, "to ignore irrelevant detail." So there must always be a goal, a test of relevance.
The problem is that relevancy is relative (EverythingIsRelative). Us RelationalWeenies like to brag about relational's ability to dynamically manage our view of what is relevant to us for a given task or user. Ad-hoc queries are all about DynamicRelevancy?. Relational is the closest thing I know to getting RubberAbstraction?s.
Somewhat on the contrary, see AbstractWithOnceAndOnlyOnce.