The document discusses the principles of simple design for software development. It outlines four rules: 1) all tests must pass, 2) no duplicated code, 3) code is self-explanatory, and 4) no superfluous parts. The document argues that simple design focuses on removing duplication and fixing poorly named code, as this helps the appropriate structure and responsibilities emerge in the design. Choosing good names that are pronounceable, intention-revealing, and use a ubiquitous language is also discussed.
13. Simple Design
1. All tests must pass
2. No code is duplicated
3. Code is self-explanatory
4. No superfluous parts exist
14. Simple Design
1. Passes its tests
2. No code is duplicated
3. Code is self-explanatory
4. No superfluous parts exist
15. Simple Design
1. Passes its tests
2. Minimizes duplication
3. Code is self-explanatory
4. No superfluous parts exist
16. Simple Design
1. Passes its tests
2. Minimizes duplication
3. Maximizes clarity
4. No superfluous parts exist
17. Simple Design
1. Passes its tests
2. Minimizes duplication
3. Maximizes clarity
4. Has fewer elements
18. Simple Design
1. Passes its tests (given TDD)
2. Minimizes duplication
3. Maximizes clarity
4. Has fewer elements
19. Simple Design
1. Passes its tests (given TDD)
2. Minimizes duplication
3. Maximizes clarity (fix names)
4. Has fewer elements
20. Simple Design
1. Passes its tests (given TDD)
2. Minimizes duplication
3. Maximizes clarity (fix names)
4. Has fewer elements
21. That leaves me with two key elements
of simple design: remove duplication and
fix bad names.
When I remove duplication, I tend to see
an appropriate structure emerge, and when
I fix bad names, I tend to see responsibilities
slide into appropriate parts of the design.
J. B. Rainsberger
32. “The prime directive that was
unanimously agree upon by all
present was that in the next
tens years Agile leaders must
Demand Technical Excellence”
Jeff Sutherland
33. “Failure to do that means
you are not an Agile leader”
Jeff Sutherland