
Andrew Hunt and David Thomas
Master the craft of software development by treating code like a living garden, 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.