System Metaphor
The System Metaphor in XP is likely the least understood practice. Some have described it as being the Logical Architecture, although it could be argued that Architecture itself is also not well understood!
At the very least, the Metaphor is intended to provide the team with a common "system of names" and a common system description that guides development and communication. This would be something that is easily understood by both the Programmers and the Customer. This system of names is seen even in the classes and tests that comprise the system, and the interactions in the code.
For example, a payroll system could use the metaphor of The Assembly Line. An employee's GrossPay would be fed into the line. A Conveyor (or ConveyorBelt) would be the mechanism for the work flow, with Stations for each stop along the line. For example, there would be an IncomeTaxDeductionStation, PensionDeductionStation, OvertimePayStation, etc. At the end of the Assembly Line is the final NetPay.
Having a metaphor also provides a simple way of communicating with people who join a project later in its life. For example, consider Programmers who are assigned to maintain an existing system. Typically they have to wade through documentation and code and form their own 'theories' of what the system is supposed to do, and how it's supposed to do it. By having the Metaphor in place, they are able to quickly learn the nomenclature that the other Programmers and the Customer are using.
The Metaphor has, in many cases, been supplanted by Eric Evans' Domain Driven Design.
For more information about Extreme Programming, visit our Resources page.