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:
-
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.
List filter results
-
Expected results for time-based filters
-
Prerequisites:
-
Clear task manager with
clear
-
Add Task A using
add n/A p/5 d/due today l/one t/X Y
whereX
is today’s date and Y is a time before the end of the day -
Add Task B using
add n/B p/5 d/due before sunday l/two t/X Y
whereX
is any valid date before the end of the week andY
is any valid time -
Add Task C using
add n/C p/5 d/due before end of month l/two t/X Y
whereX
is any valid date before the end of the month andY
is any valid time
-
-
Test case 1:
list f/today
, Expected: Only Task A is listed. -
Test case 2:
list f/week
, Expected: Only Task B is listed. -
Test case 3:
list f/month
, Expected: Only Task C is listed.
-
-
Expected results for dependency-based filter (
doable
)-
Prerequisites:
-
Clear task manager with
clear
-
Add Task A using
add n/A t/1-1-19 p/5 d/blank l/two
-
Add Task B using
add n/B t/1-1-19 p/5 d/blank l/two
-
Add Task C using
add n/C t/1-1-19 p/5 d/blank l/two
-
List all tasks using
list
-
Add a dependency from A to B using
dependency 1 2
-
-
Test case 1:
list f/doable
, Expected: Tasks B and C are listed. -
Test case 2:
list
,complete 2
,list f/doable
, Expected: Tasks A and C are listed.
-
Task View Panel
-
Expected view for selecting tasks
-
Prerequisites:
-
Clear task manager with
clear
-
Add Task A using
add n/A t/1-1-19 p/5 d/blank l/two
-
Add Task B using
add n/B t/1-1-19 p/5 d/blank l/two
-
-
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. -
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. -
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. -
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