KentBeck told me something very important one time. When you are coding you should only be wearing one of four different hats.
At one point in the C3 project I had a collection of hats on my bookcase to remind me how important a habit this is to develop. --DonWells
We've gone Extreme, and are down to two hats now: interface or implementation. And Don is right ... it's very important.
Please clarify for me how you only wear two hats. Two hats seems too few. Are you saying that if you come to a class which requires refactoring and cleaning up for its own sake, as well as requiring new functionality, would you advocate doing both in a single step? What we were taught is when adding new functionality, it should almost be a drop-in. Refactoring is usually required first to make it so. We would consider this to be two steps: refactoring and new functionality. Would you advocate a single step? --JeanineDeGuzman
Not at all ... read on below ...
Put me in the puzzled camp as well. Changing the Interface for refactoring vs changing the interface for new functionality seems distinct. So why drop two of the four hats? --PeteMcBreen
We refactored the rule ... read on ...
It's a two-d matrix, of course. interface / implementation vs refactor / add.
The refactor / add dimension, however, is your overall purpose. The interface / implementation dimension is the immediate purpose for your typing at the moment.
The XP rule SitOnOneCard directs that you only have one overall purpose, pins the refactor / add dimension (and also the add one thing / add another thing).
That lets the hats refer only to your coding activity net of overall purpose.
A common strategic problem is to work on two cards at once. A common tactical problem in the heat of coding is to work on interface and implementation at once.
Don's formulation is good advice as phrased. We now break out the two dimensions. Sort of refactored the rule.
I think some [/all?] of the places above where the verb "to refactor" is used, it may be an instance of an outdated term, where the later decision was to use the word "design" instead. --MikeSchwartz
In this case refactor is correct. That has to do with the ExtremeValues where it was decided that design was a more general term for refactor. Refactoring is often how we do DesignInXp. --DonWells
Ooops, yeah, See also RefactorOrDesign. --MikeSchwartz
Where does bug fixing fit in? Suppose you were refactoring some code, and noticed a bug. Do you add a test and fix it right a way, or do you postpone it until after you've finished your current refactoring? Or, the third option: back out your current refactoring, then test and fix the bug. Then, decide where to go next (this may not be the refactoring you were in the middle of!)
See also RefactoringHat, RewritingHat