We feel that the only way to develop software reliably, and make our development easier to understand and maintain, is to follow what we call the DRY principle.
The DRY principle is stated as “Every piece of knowledge must have a single,unambiguous, authoritative representation within a system.”
Most of the duplication we see falls into one of the following categories:
a) Imposed duplication.
Developers feel they have no choice—the environment seems to require duplication.
b) Inadvertent duplication.
Developers don't realize that they are duplicating information.
c) Impatient duplication.
Developers get lazy and duplicate because it seems easier.
d) Interdeveloper duplication.
Multiple people on a team (or on different teams) duplicate a piece of information.