1. When
1.1. Always
1.1.1. every time you write it
1.2. In Practice
1.2.1. spec is uncertain?
1.2.1.1. customers talk in endless circles
2. How
2.1. Goals
2.1.1. dependencies
2.1.1.1. loosely coupled
2.1.2. responsibilities
2.1.2.1. highly cohesive
2.1.3. boundaries
2.1.3.1. easily composible
2.1.4. context
2.1.4.1. context independent
2.2. Skills
2.2.1. OOD
2.2.2. testing
2.2.3. refactoring
2.3. In Practice
2.3.1. notice risk
2.3.1.1. increase
2.3.1.1.1. write code that guesses the future
2.3.1.2. decrease
2.3.1.2.1. arrange code to accommodate change
2.3.2. can't see clearly?
2.3.2.1. break into smaller pieces
3. What
3.1. Code
3.1.1. how it's arranged
4. Why
4.1. Lower Costs
4.1.1. how to know?
4.1.1.1. you are maintaining velocity
4.2. Raise Costs
4.2.1. under-design?
4.2.1.1. your ARRANGEMENT of code interferes with change
4.2.2. anticipatory-code?
4.2.2.1. your ANTICIPATORY code interferes with change
4.2.2.2. programmers talk in endless circles
5. Who
5.1. You
5.1.1. with your fingers on the keyboard
6. Where
6.1. Messages
6.1.1. define the API
6.2. Implementation
6.2.1. hide the mess