PROJECT: WatchOver

Overview

WatchOver is a gamified desktop Task Manager application used for learning Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

Summary of contributions

  • Major enhancement: Extended List to allow viewing of tasks that are due before a certain date, or have no dependency

    • What it does: Allows the user to

      • list tasks that have a "due date" before certain points in time relative to the current time, e.g the end of the day or the end of the week.

      • list tasks that do not have any uncompleted dependencies.

    • Justification: This feature ties in with the overall goal of the product, as users can manage their tasks better — they can see what tasks need to be done in a given time span, or see what tasks are not blocked by other dependencies.

    • Highlights: This command is able to extend the functionality of the original List command without causing many changes to other parts of the codebase. The only dependencies would be formed by the predicates created for the command. Working with time-based comparison (and testing) was very challenging.

  • Code contributed: [RepoSense]

  • Other contributions:

    • Minor Enhancement: Added UI to see details of a Task

      • This replaces the default browser in AB4, and allows the user to view all the details of a particular Task conveniently.

    • Project management:

      • Managed release v1.2 on GitHub

    • Enhancements to existing features:

      • Refactored the storage component of address book to fit task manager.

    • Documentation:

      • Refactored About Us page and added scaffolds for project portfolios

    • Community:

      • PRs reviewed (with non-trivial review comments): #60, #35

      • Reported bugs and suggestions for other teams in the class: 99, 94, 91, 98

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Shows a list of all tasks.

Format: list [f/FILTER], where FILTER must be any of the following:

  • today: Lists tasks that are due before the end of the day

  • week: Lists tasks that are due before the end of the week

  • month: Lists tasks that are due before the end of the month

  • doable: Lists tasks that do not have any uncompleted dependencies (or no dependencies)

+Example: list

+Example: list f/today

-Example: list f/alltime

1. finish math tutorial  DueDate: 01-10-18 1300 Description: before exam PriorityValue: 2 Status: IN PROGRESS
2. Attack Food  DueDate: 01-10-18 Description: what did food do PriorityValue: 88 Status: COMPLETED
3. Induce Happiness DueDate: 03-10-18 Description: conditions of happiness PriorityValue: 3 Status: OVERDUE

Note on Task fields

A task has various fields. Some of these fields can be edited directly, while the rest are derived from the fields that can be edited.

Editable fields

  • Name: the name of a task

  • Due Date: the date and time when a task is due

  • Priority Value: the priority value that a task has

  • Description: additional description regarding the task

  • Labels: a list of labels that can be used to classify/identify the task

  • Dependencies: a list of tasks that this task is dependant on. Only the names of the tasks are shown.

Derived fields

  • Remaining time: the time remaining, from the current time, until the Due Date of the task.

  • Status: the current status of the task, depending on whether it has been completed or not. It is denoted by either "IN PROGRESS", "COMPLETED" or "OVERDUE".

  • Effective Due Date: the earliest due date among all tasks directly or indirectly dependent on the task, including the task itself

[Note]: effective due date is not used in any command i.e. list by date or in checking overdue

The "Remaining time" and "Effective Due Date" fields are blank for completed tasks.

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Monitoring time

Current Implementation

Time is of key importance when dealing with the TaskManager. We implement and represent time using the ubiquitous Date class in Java. The class DueDate internally uses the Date class, and harnesses built in capabilities such as date comparison. The precision of time for tasks is to the minute, that is the AddCommand can accept a DueDate accurate to the minute.

A check on whether any of the tasks are overdue is done before the execution of every command.

List

Current Implementation

The list command accepts filters that either filter based on the due date of the tasks (relative to the current date) or the dependencies of the task. This is done using predicates that are given to filter the task list.

Date

The Current Date is retrieved using Java’s Calendar, and is adjusted to be the end of the day, week, or month depending on the ListCommand 's option. A predicate is then created to check if a given Task is before this date.

Dependency

The dependency of a task is checked using its instance of the Dependency object. A caveat is that the tasks represented in the Dependency are stored as hashes, requiring the use of a Model to fetch the task associated to that hashcode, in order to check its completion status.

ListCommandSequenceDiagram

List filter results

  1. Expected results for time-based filters

    1. Prerequisites:

      1. Clear task manager with clear

      2. Add Task A using add n/A p/5 d/due today l/one t/X Y where X is today’s date and Y is a time before the end of the day

      3. Add Task B using add n/B p/5 d/due before sunday l/two t/X Y where X is any valid date before the end of the week and Y is any valid time

      4. Add Task C using add n/C p/5 d/due before end of month l/two t/X Y where X is any valid date before the end of the month and Y is any valid time

    2. Test case 1: list f/today, Expected: Only Task A is listed.

    3. Test case 2: list f/week, Expected: Only Task B is listed.

    4. Test case 3: list f/month, Expected: Only Task C is listed.

  2. Expected results for dependency-based filter (doable)

    1. Prerequisites:

      1. Clear task manager with clear

      2. Add Task A using add n/A t/1-1-19 p/5 d/blank l/two

      3. Add Task B using add n/B t/1-1-19 p/5 d/blank l/two

      4. Add Task C using add n/C t/1-1-19 p/5 d/blank l/two

      5. List all tasks using list

      6. Add a dependency from A to B using dependency 1 2

    2. Test case 1: list f/doable, Expected: Tasks B and C are listed.

    3. Test case 2: list, complete 2, list f/doable, Expected: Tasks A and C are listed.

Task View Panel

  1. Expected view for selecting tasks

    1. Prerequisites:

      1. Clear task manager with clear

      2. Add Task A using add n/A t/1-1-19 p/5 d/blank l/two

      3. Add Task B using add n/B t/1-1-19 p/5 d/blank l/two

    2. Test case 1: select 1, Expected: Task A is selected and its details are displayed on the Task View Panel on the right hand side.

    3. Test case 2: select 2, Expected: Task B is selected and its details are displayed on the Task View Panel on the right hand side.

    4. Test case 3: edit 2 n/C, Expected: Task B is edited to become Task C, gets selected and its details are displayed on the Task View Panel on the right hand side.

    5. Test case 3: edit 2 n/C, Expected: Task B is edited to become Task C, gets selected and its details are displayed on the Task View Panel on the right hand side.

Target User Profile

We target overworked students that like mobile games with positive reinforcement.

  • Needs extrinsic motivation to complete tasks, such as XP system

    • Finds constant affirmation of their progress in the form of preserved statistics over varying time window to be particularly motivational for them.

    • Would like to spice things up with different gamified modes in earning XP.

  • Leads a multifaceted life with variation in tasks they need to do

    • Prioritises activities differently

    • Some tasks have natural dependencies on other tasks in their lives

    • Has a high volume of tasks with differing deadlines

  • Prefer CLI apps over fancy GUI