Skip to content

Requirements

Cedric Wang edited this page Dec 6, 2023 · 5 revisions

Requirements

Problem Description:

Course planning at the University of Waterloo can be problematic due to factors such as limited resources, poor coordination between faculties, and a lack of any easy-to-use software. There’s no platform on which they can both plan courses for the upcoming term and for their degree overall. The overall process of a student planning their courses for an upcoming term involves a lot of trial and error in terms of selecting a set of 4-6 courses that can actually fit in one schedule. There is no software that aids with this trial and error (students have to manually look up course times and determine if their desired schedule works). Adding a course into Quest is a tedious and a time consuming process, so although it does detect time conflicts in your proposed schedule it’s not very efficient for students.

Users: The specific group of users that would be interested in your project:

The use case for this application is geared towards students at the University of Waterloo.

User Persona:

Personal Info: Student at the University of Waterloo.

Demographic Info: 18-25 years of age. Enrolled in an academically challenging program.

Goals & Motivations: Overachieving, organized student who enjoys taking classes with his friends at the University of Waterloo.

**User Story: **

Aryaman Wang Shah (Nickname: AWS) is a third-year student at the University of Waterloo studying Computing and Financial Management. As a third year, AWS has a lot of flexibility in course selection for the upcoming Winter 2024 term. Being an overachiever, he wants to take six courses in the upcoming semester. AWS has completed his course selection and has received his class schedule a couple weeks before the term starts.

However, he notices a time conflict between two of his selected courses; CS251 and CS370. AWS has two to three other classes on his wish list of courses so he can switch one of the conflicting courses out with something else. However, another reason for the issue occurring may be because the CS251 tutorial overlaps with the CS370 lecture. If AWS switches to another CS251 tutorial section, it will allow him to take CS370. But perhaps AWS’ desired tutorial time is full, and he must wait until enrolment capacity is not at maximum.

There are various options for AWS to choose from and he is completely overwhelmed. He’s frantically scribbling different versions of a potential schedule in his notebook to find a schedule that works for him. He eventually finds a schedule that works, but after double checking the class and tutorial times, he realizes he miswrote the times of one of his classes and a conflict arises again. AWS is furious and wishes there was an easier way for him to solve this problem.

Our App’s Solution – User Resolution:

The course planning app allows the user to select the classes they wish to take in the upcoming term and display them in a calendar view. The app will detect time conflicts immediately upon selection of the course and mention the source of the conflict. The user will be allowed to save multiple variations of their schedule, providing various combinations of courses for the upcoming term. If there is a full lecture or tutorial section that the user wants to switch into the user can add that section to their wishlist. Moreover, a user can try to optimize their course schedule by providing a list of courses they want to take.

Functional Requirements

The following are major functionalities of our application:

Functionality Issues 1. User sign-in and authentication. Application includes registration and login page for users to make accounts and sign-in, allowing them to store and save their selected schedules/wishlist to their accounts.
  1. Issue #9: Authentication and Sign-In
2. Browse and filter all available classes at the University of Waterloo for the upcoming academic term. A course’s info page includes the course description, prerequisites, and available schedules for the current term. Users can filter subjects with the course level in the Explore page.
  1. Issue #1: Search for Classes At the University
  2. Issue #12: Course Information Page and Add Course
  3. Issue #29: Filter course result Search
  4. Issue #31: Rework UI and logic for major pages
  5. Issue #33: Explore Page
  6. Issue #48: Improve UI Details
3. Add/remove available classes to/from the user's course schedule. Courses can be added from the course search page or from the calendar/list view of a schedule directly.
  1. Issue #2: Make Course Schedule List
  2. Issue #12: Course Information Page and Add Course
  3. Issue #31: Rework UI and logic for major pages
4. Add/remove courses to/from a wishlist that saves courses a student may wish to take in the current term and any upcoming term in their degree (i.e. 3A, 3B …). They can also populate the wishlist with courses they have already taken to be able to view their entire undergraduate experience. Users can directly add to their wishlist from the course info page or from a sidebar.
  1. Issue #3: Make Wishlist for Courses
  2. Issue #21: Display Multiple Terms for Wishlist
  3. Issue #34: Improve UI on wishlist
  4. Issue #40: Add scroll bar to wishlist page
  5. Issue #41: Add dropdown on course info page
  6. Issue #42: Display different years and terms for students
  7. Issue #43: Provide add/remove functionality from the wishlist
  8. Issue #44: Allow users to add courses to the term's wishlist from the wishlist page itself (sidebar to add courses)
  9. Issue #48: Improve UI Details
5. Display current selected courses in a calendar view and uses can move between different weeks.
  1. Issue # 4: Calendar View for Courses
  2. Issue #14: Make Calendar Size Adaptable to Window Size
  3. Issue #15: Add background lines to Calendar
  4. Issue #23: Add Dates to Calendar
  5. Issue #37: Add Themes to Calendar
6. Allow the user to create and view alternative schedules using different classes or lecture/tutorial times. Users can drag and drop courses onto their alternate calendar.
  1. Issue #5: Make Alternative Schedules
  2. Issue #32: Drag and Drop Feature for Alternate Schedules
7. Detect time conflicts between courses in the student’s main calendar for the current term. A course that conflicts with an existing course in the user’s schedule cannot be added.
  1. Issue #6: Detect Time Conflicts
8. Allow users to add friends and view their calendars through the app. A user can both send and accept friend requests within the app. If a friend request is accepted the user can view their friend’s schedule and compare it to their own.
  1. Issue #7: Add Friends and Share Schedules
  2. Issue #8: Overlay with Friends’ Schedules
9. Optimize user's course schedules based on their selected courses through a Spring Boot OptaPlanner engine. Hard constraints include no overlap in courses. Medium constraints include minimizing working days on which courses occur. Soft constraints include minimizing gaps between courses on the same day.
  1. Issue #10; Optimize Course Schedules UI
  2. Issue #38: Optimization Backend Engine
10. All pages in the application can be navigated via a sidebar. The user can also logout from the app via the “Logout” button on the sidebar. Home page also shortcuts to different pages.
  1. Issue #18: Side Bar Menu Layout
  2. Issue #24: Update Landing Page with Cards
  3. Issue #28: Logout button
  4. Issue #30: Sidebar Custom Calendar UI
  5. Issue #35: Improve UI on Home Page
11. User preferences are saved to the user’s local file system. Mainly, the app’s screen size and the selected theme for the calendar are saved when a user quits the application and are restored when reopened.
  1. Issue #47: Save User Preferences to Local File Storage
12. Application includes hotkeys and top menu options for shortcuts including quitting the app, navigating to the course search page and creating a new alternate schedule. Texts in the application can be copied and pasted through a menu and hot keys.
  1. Issue #46: Hot Keys for App
12. All users and their assets are saved to a Postgres database through API routes.
  1. Issue #11: Persist User Course Selection Data to Database
  2. Issue #13: Implement Routes for Courses, Schedules and Subjects in Backend from UW OpenData API
  3. Issue #17: Persist Wishlist Data to Database
  4. Issue #39: Support backend for multiple term wishlists
13. Servers are deployed to the cloud and can also be built with Docker.
  1. Issue #19: Containerizing Project with Docker Compose
  2. Issue #49: Deploy application to GCP

Clone this wiki locally