during which the developer selects the system-level structure and allocates the software requirements to the structure's components. Architectural design sometimes called top level design or preliminary design typically defines and structures computer program components and data, defines the interfaces, and prepares tim- ing and sizing estimates.