Describe any design decisions and/or strategies that affect the overall system and its higher-level structures.
These strategies should provide insight into the key abstractions and mechanisms used in the system architecture. Describe the reasoning employed for each decision and/or strategy (possibly referring to previously stated design goals and principles) and how any design goals or priorities were balanced or traded-off.
Examples of design decisions might concern (but are not limited to) things like the following:
Use of a particular type of product (programming language, database, library, commercial off-the-shelf (COTS) product, etc.)
Reuse of existing software components to implement various parts/features of the system
Future plans for extending or enhancing the software
User interface paradigms (or system input and output models)
Hardware and/or software interface paradigms
Error detection and recovery
Memory management policies
External databases and/or data storage management and persistence
Distributed data or control over a network
Generalized approaches to control
Concurrency and synchronization
Communication mechanisms
Management of other resources