1. Decomposition, abstraction and subprograms