(1) decompose our system
- value types
- objects
decompose our system into value types and loosely coupled computational objects
(2) building blocks
- lower-level objects into more capable objects
use lower-level objects as the building blocks of more capable objects
(src: Book: Growing Object Oriented Software, Guided By Tests - Steve Freeman & Nat Pryce)