
Andrew Hunt and David Thomas
Master the craft of software development by embracing change and taking active responsibility for every design choice you make.
Eliminate duplicated knowledge across your system to ensure every piece of logic has a single, authoritative representation.
Design independent, self-contained components that do not affect unrelated modules to make the overall system easier to test and change.
Fix bad designs and poor code immediately, as ignoring small issues signals a lack of care that accelerates the decay of the entire project.