Design - determining how the software should be built to provide the features.
Architectural design is to design the highest-level structure of the system.
Interface design specifies the interfaces between parts of the system (e.g., components).
Detailed design designs the algorithms for the individual parts (e.g., identifies methods in classes and relationships among classes).
Implementation - building the software.