In software development, hardly any principle enjoys as much prestige as abstraction. Those who abstract are considered forward-thinking. Those who recognize and combine commonalities are considered ...