# M3: Design Proposal

Your design proposal builds on your M2 Project Proposal by considering how you will build the system that you described in that document.

# What to include

You should have the following sections, where you address the questions listed. At this stage, answers should be relatively short; one or two sentences, and possibly a high-level diagram (e.g., architecture diagram showing the components, or a data diagram).

# 1. Architecture

Assume that you will implement the requirements listed in your M2 Project Proposal.

  1. Provide a high-level component diagram, showing the structure of your system. You should identify your application, including relevant application components, and any external systems e.g., remote database, cloud service.
  2. You've been provided with a number of architectural styles. Which one do you think suits your application? (NOTE: this is a trick question. For 90% of you, you will want a layered architecture or MVVM).
  3. For components outside of your local application, where do you expect them to be hosted? Will they be hosted by some third party? e.g, a cloud service like AWS? A cloud database like MongoDB?
  4. Are there privacy and security implications to your design? Does being online change how you think about creating an application?

# 2. Application Features

  1. Identify the target platform and OS version you are targeting with your application i.e., Android, iOS, Windows, macOS.
  2. Describe how you will you test against these platforms; ensure that you have access to hardware and services required.
  3. Are there any features that you do not know how to implement? Identify risks and features that you need to investigate early in your project.
  4. Sketch out low-fidelity prototypes of your UI/screens, showing basic functionality of your application. Keep these simple! You need to illustrate basic information and screen flow; you don't need much more detail.

# 3. External Dependencies

  • Are there any local dependencies or libraries that you are planning to use?
  • Do you need to identify libraries that can handle functionality that you cannot build yourself? e.g., if you are building a markdown editor, you may want to investigate a library to handle parsing and syntax highlighting instead of building it yourself. It possible, identify these as risks.

# Where to store this document

Your proposal should be contained in a Wiki page titled Design Proposal, and linked from the README.md file of your GitLab project.

# How to submit