About the project

Welcome to my Project Portfolio Page! My team and I were tasked to enhance an open source, basic command line interface (CLI) addressbook for our Software engineering project. Given the constraints that the final product had to use CLI as the primary mode of input and be functional offline, we decided to morph it into a project management application called Pocket Project.

This upgraded application enables project managers to keep track of everything about ongoing and completed projects, as well as the data of employees under the manager, all in one place.

My role was to design and write the code for the addto projecttask, update projecttask and removefrom projecttask features. The following sections will explain in more detail these features, as well as my documentation contributions in the user and developer guides during this project.

Before we continue, do take note of the following symbols and formatting used in this document:

Symbol Meaning

ug notepadpencil

The note pad icon indicates any information which you might find handy.

ug lightbulb

The light bulb icon indicates any shortcuts that you can use while using application.

ug exclamation

The exclamation mark icon indicates any warnings that you might want to take note of when using Pocket Project.

addto

A grey highlight (called a mark-up) indicates that this is a command you can use in Pocket Project. In the documentation sections, this might refer to code-related implementations in the application.

addto

A grey highlight with light blue text indicates this is an abbreviated command shortened for the sake of brevity.

Summary of contributions

This section shows you a summary of my coding, documentation, and other helpful contributions to the team project.

Major feature added: Project tasks which helps users to track a project’s progress.

ug notepadpencil

Milestones give a broad overview of what is needed to complete a project. Project tasks in milestones help keep track of what needs to be done to reach the next milestone.

PPPmilestonesandtasks
Figure 1. How the milestones and tasks feature looks like
  • What it does: The addto projecttask command adds a task to a milestone in a project. The update projecttask command allows the manager to set the status of the task to ongoing, on hold or complete. The removefrom projecttask command removes the specified task completely from the milestone.

  • Justification: This feature improves the product significantly because it greatly enhances the level of organization and control which the manager has while planning out a schedule for projects.

  • Highlights: The implementation of this feature was slightly unique and required an approach different from how other features were implemented as a project task is a component of milestones which is in a project. Most other features in Pocket Project directly interact with either employees or projects, unlike that of project tasks which interact only with milestones. It required me to make changes to the behaviour of the existing Milestone class and how it was stored in a project in order to get it to work as desired.

  • Credits: The code for addto command parser which I extended for the project task feature and the original milestone code which I enhanced was done by my teammate Jothinandan Pillay. The code for update command parser was done by my teammate Jeff Gan. The code for removefrom command parser was done by my teammate Lin Dehui.

  • Code contributed for project task feature

    • Adding project task to milestone: [#141] [#176]

    • Update a project task’s status: [#219]

    • Removing a project task from a milestone [#228]

Other contributions:

  • Project management:

    • Managed releases v1.2 - v1.3.1 (3 releases) on GitHub

    • Set up kanban with automation on Github

  • Minor code changes:

    • Renamed instances of person to employee, addressbook to Pocket Project and tags to skills. [#27] [#57] [#91]

  • Team contributions:

    • Find and report bugs and suggest possible enhancements which can be done in the team’s issue tracker. [#123] [#216]

    • Helped to do debugging and resolve bugs in other team member’s code when they required help. [#225]

  • Community contributions:

    • Reported bugs found in other team’s (CS2103-AY1819S2-W14-4) application [#116] [#112] [#132] [#138]

Contributions to the User Guide

You can view this section to see my contributions to the User Guide documentation for addto projecttask, removefrom projecttask and update projecttask command.

Add a project task to a project’s milestone: addto projecttask

Building further on the functionality of milestones, you can also add project tasks to existing milestones in Pocket Project. This allows you to track and plan out in more detail what needs to be done between each milestone.

Format: addto PROJECT_NAME projecttask n/PROJECT_TASK_DESCRIPTION m/MILESTONE_INDEX

ug exclamation

The MILESTONE_INDEX must be a positive integer and cannot be larger than the size of the displayed milestone list.

Examples:

  1. addto Apollo projecttask n/Create feature XYZ m/1
    A project task with the given description will be added to the list of tasks under the milestone at index 1 in project "Apollo".

  2. addto Orbital projecttask m/2 n/Prepare concept design sketches
    A project task with the given description will be added to the list of tasks under the milestone at index 2 in project "Orbital".

ug lightbulb

There is no specific order for either the project task name or the milestone index when entering the command so either way is acceptable.

You can refer to the screenshot below to have a clearer picture of how it works and looks like.

ug addprojecttask
Figure 2. Adding a task to a project’s milestone

ug notepadpencil

Clicking on the arrow beside a milestone containing existing tasks allows you to hide the list of tasks under the milestone.

Remove a project task from a project’s milestone: removefrom PROJECT_NAME projecttask

You can remove existing project tasks from a milestone if there is a change in the planned project’s schedule.

Format: removefrom PROJECT_NAME projecttask MILESTONE_INDEX PROJECT_TASK_INDEX

ug exclamation

The MILESTONE_INDEX and PROJECT_TASK_INDEX must be a positive integer and cannot be larger than the size of the displayed milestones and tasks list.

Examples:

  1. removefrom Apollo projecttask 1 1
    The 1st project task in the task list under the 1st milestone of the displayed milestone list in project "Apollo" will be removed.

  2. removefrom Orbital projecttask 2 1
    The 1st project task in the task list under the 2nd milestone of the displayed milestone list in project "Orbital" will be removed.

You can refer to the figure below to have a clearer picture of how it looks like when the command removefrom Orbital projecttask 2 1 is called.

ug removeprojecttask
Figure 3. Before and after comparison when removing a task from a project’s milestone

ug notepadpencil

The arrow beside the milestone description for collapsing the task list will disappear if all tasks for that milestone are removed.

Update the status of a project task: update projecttask

You can update the status of a project task to indicate its progress.

Format: update PROJECT_NAME projecttask MILESTONE_INDEX PROJECT_TASK_INDEX STATUS

ug exclamation

The MILESTONE_INDEX and PROJECT_TASK_INDEX must be a positive integer and cannot be larger than the size of the displayed milestones and tasks list.

Examples:

  1. update Apollo projecttask 1 1 ongoing
    Updates the status of the first project task in the first milestone of project 'Apollo' to "ongoing".

  2. update Orbital projecttask 2 1 complete
    Updates the status of the first project task in the second milestone of project 'Orbital' to "complete".

You may refer to the diagram below to get a clearer picture of how updating a project task’s status looks like when the command update Orbital projecttask 2 1 complete is called.

ug updateprojecttask
Figure 4. Before and after comparison when updating a project task’s status

Contributions to the Developer Guide

You can view this section to see my contributions to the Developer Guide documentation which consists of the implementation of the project task feature and also several sections on manual testing Pocket Project (which unfortunately I am out of space to include in here, so check out this link if you’re interested! [Manual testing, sections G3-G6, G12-G13).

Project Task feature

Current Implementation

This project task feature enhances the usage of the milestone feature in Pocket Project for keeping track of a project’s schedule by providing you with a list of tasks which needs to be done between milestones. The project task feature is mainly facilitated by the model component, and in particular, the Milestone class which stores the relevant project tasks in a UniqueProjectTaskList. This feature supports three main commands:

  • addto [project name] projecttask n/PROJECT_TASK_DESCRIPTION m/MILESTONE_INDEX — Adds the project task with the given [PROJECT_TASK_DESCRIPTION] to the milestone specified by [milestone index] in the project named [project name].

  • removefrom [project name] projecttask [milestone index] [project task index] — Removes the project task at the specified [project task index] from the milestone specified by [milestone index] in the project with name [proejct name].

  • update [project name] projecttask [milestone index] [project task index] [status] — Updates the status of the project task at the specified [project task index] in the milestone specified by [milestone index] in the project with name [project name].

Project tasks contain statuses to help you oversee its progress, whether its "Ongoing", "On hold" or "Complete".

Implementation of project task commands

The project task commands are supported by the methods in the Model interface: Model#addProjectTaskTo(Project, Milestone, ProjectTask), Model#removeProjectTaskFrom(Project, Milestone, ProjectTask) and Model#updateProjectTask(Project, Milestone, ProjectTask, Status). These three methods take in Project, Milestone and ProjectTask as common arguments. Hence, the correct project/milestone/project task which the commands act on are first located through AddProjectTaskToCommand#excute(), RemoveProjectTaskFromCommand#execute() or UpdateProjectTaskCommand#execute() before the methods of Model acting on the milestone/project task are called.

Update status of project task

Given below is an example usage scenario and a showcase of how a project task status is updated in a project’s milestone at each step.

  • update [project name] projecttask [milestone index] [project task index] [status] — Updates the status of the project task at the specified [project task index] in the milestone specified by [milestone index] in the project with name [project name].

The sequence diagram for the execution of updating a project task status is as follows:

UpdateProjectTaskSequenceDiagram
Figure 5. Sequence diagram showing execution of update Apollo projecttask 2 1 Complete

Step 1. The user enters the command update Apollo projecttask 2 1 Complete. The LogicManager then passes the entered string to the PocketProjectParser. The PocketProjectParser parses the string received and identifies the command as falling under the class of UpdateCommand and passes the rest of the string to the UpdateCommandParser to identify which type of UpdateCommand is being executed and what are the arguments.

Step 2. The UpdateCommandParser then identifies the "projecttask" keyword and creates an UpdateProjectTaskCommand and passes it to the LogicManager to be executed.

Step 3. On execution of the command, the validity of the arguments are checked and then call the methods of the Model component to locate and obtain the necessary objects.

Step 4. The Model component then searches for the project with name Apollo. After which, it searches for the milestone at index 2 of the project’s milestone list. Then, it retrieves the specified project task at index 1 in the milestone’s project task list. In each of these 3 searches for the specified object, after the object is found, it is returned to the UpdateProjectTaskCommand object and used for the next search.

Step 5. The update status method of the retrieved task is then called with "Complete" as an argument. This updates the project task status to "Complete" and execution of the UpdateProjectTaskCommand ends.

ug exclamation

The [project name] entered must be valid and exists in the app. The [milestone index] and [project task index] given must refer to some existing milestone and project task. Also, the status to be updated to needs to be of the correct format. If not, exceptions would be thrown during the execution of the command.

Design Considerations

In this section, I will talk about certain alternatives that could have been taken when designing this feature and why I did or did not use them.

Aspect: How should project task objects be stored within a project

Alternative 1: Store project tasks in a UniqueProjectTaskList which is in turn stored under a specified milestone. (Current implementation)

  • Pros: Only milestone objects are in direct contact with the project tasks through the UniqueProjectTaskList container class and checks to ensure project tasks work as they should only need to be done within the milestone instead of in the entire project itself.

  • Cons: Somewhat harder to implement as it requires finding the correct milestone in a project first before anything can be done for the project task specified in the user’s command.

Alternative 2: Store project tasks directly in a project and keep a reference to the milestone which it should be under.

  • Pros: Easy to implement and will have similar behaviour to existing implementations of other objects stored directly in a project.

  • Cons: It can be confusing in the backend as the user can have tasks under different milestones with the same project task descriptions. This also goes against the Object-Oriented Programming(OOP) Guideline, Law of Demeter as project tasks only need to be in direct contact with milestones but not necessarily with projects themselves.

Based on the above pros and cons for each alternative, I decided on Alternative 1 for 2 reasons:

  1. As it was in line with the OOP guidelines and principle.

  2. As it allowed me to implement a more robust and efficient checking system for project tasks which was constrained within a milestone itself.

Future planned enhancements

The following features are scheduled to be implemented in a future version of Pocket Project:

  1. Allow the assigning of project tasks to employees in a project which gives you a better overview of who is in charge of doing what task during the project’s duration.

  2. Include the completion date of a project task when it is completed, allowing you to backtrack from the completion date of the project task to see what was done for the project task’s completion.