I use a kitchen analogy. Writing software is like cooking in your kitchen. You dirty dishes and utensils, use up ingredients, and the sink gets crowded with detritus. Refactoring is washing the dishes, buying new ingredients, and straightening up the kitchen.<p>In professional kitchens most chefs enforce the clean-as-you-go rule[1]. The same rule should apply to professional software development.<p>[1] <a href="http://www.pbs.org/food/features/cleanliness-is-next-to-impossible/" rel="nofollow">http://www.pbs.org/food/features/cleanliness-is-next-to-impo...</a>