Design phases
Architectural design Identify sub-systems
Abstract specification Specify sub-systems
Interface design Describe sub-system interfaces
Component design Decompose sub-systems into components
Data structure design Design data structures to hold problem data
Algorithm design Design algorithms for problem functions