# Overview

**Instructions**:   
Describe the system architecture, how the application interacts with other applications. 

  

Provide an overview of how the functionality and responsibilities of the system were partitioned and then assigned to subsystems or components. 

Don’t go into too much detail about the individual components themselves in this section. The main purpose here is to gain a general understanding of how and why the system was decomposed, and how the individual parts work together to provide the desired functionality. You can follow the below sequence:

1.  At the top-most level, describe the major responsibilities that the software must undertake and the various roles that the system (or portion of the system) must play. 
    
2.  Describe how the system was broken down into its components/subsystems (identifying each top-level component/subsystem and the roles/responsibilities assigned to it). 
    
3.  Describe how the higher-level components collaborate with each other in order to achieve the required results.
    
4.   Provide some sort of rationale for choosing this particular decomposition of the system (perhaps discussing other proposed decompositions and why they were rejected).
    
5.  Make use of design patterns whenever possible, either in describing parts of the architecture (in pattern format), or for referring to elements of the architecture that employ them. 
    
6.  Provide rationale for choosing a particular algorithm or programming idiom (or design pattern) to implement portions of the system’s functionality.
