Farrell Nah Jun Hao's Project Portfolio Page
Project: Momentum
Momentum is a project management application targeted at freelancers to help them better understand their time usage . It is written in Java, and has about 10 kLoC.
Given below are my contributions to the project.
-
Code contributed: RepoSense link
- New Feature: Added time tracking to projects and tasks:
start
andstop
commands. #19, #76- What it does: Allows users to track the amount of time spent on a project through the
start
andstop
commands. - Justification: This is a core feature of the product. Time tracking allows users to collect data on how they are spending their time.
- Highlights: This enhancement requires the addition and management of an additional
WorkDuration
data class for projects and tasks. Additional considerations were required to allow for multiple concurrent timers, and for timers to continue running while the application is closed.
- What it does: Allows users to track the amount of time spent on a project through the
- New Feature: Added statistics tracking. #40,
#49
- What it does: Allows Momentum to calculate statistics from the time tracking data. the amount of time the user spends on each project and task over a predefined period of time (e.g. daily, weekly, monthly)
- Justification: The statistics processes and presents the time tracking data in a way that is useful for the user, allowing them to draw insights into how they are using their time.
- Highlights: Calculating and displaying statistics dynamically requires new UI elements had to be added to display the statistics. The statistics tracking was implemented in a way that allows for new types of statistics to be easily added in the future.
- New Feature: Added Navigation between projects and tasks:
home
andview
commands #83- What it does: Commands that allow users change between viewing projects, and tasks belonging to a project.
- Justification: This is a key part of the tasks feature, the rest of which was implemented by another team member, allowing users to view the tasks that they have added.
- Highlights: This enhancement affects existing commands and commands to be added in the future. It also heavily affects the way the Model class worksby introducing a state that needs to be managed. Collaborated closely with another team member (Praveen) to integrate the changes with existing commands as it required a lot of code changes across the repository.
- Code Refactor: Converted an existing class into a generic class to reduce code duplication and allow for more
flexibility.#197
- The
UniqueProjectList
class handles a list of unique projects. I refactored the class to make it a generic classUniqueItemList<T>
that can handle a list of arbitrary objects. - This was important as the project needed to handle lists of multiple objects. Created a new UniqueXList to handle each project would have resulted in a lot of code duplication, and is difficult to extend to more objects.
- The
- Enhancements to existing features:
- Documentation:
- User Guide:
#79, #128, #284
- Added the UI Overview section.
- Added documentation for the features
start
,stop
,home
,view
and statistics. - Added additional examples for the “Date and Time Terms” section to better explain the format requirements.
- Developer Guide:
#79, #285
- Updated class diagrams to reflect the additional classes used for time tracking and statistics
- Added implementation details of the time tracking and statistics features.
- Created a sequence diagram to illustrate how statistics are calculated.
- Created a class diagram to illustrate the classes involved in the time tracking process and how they interact.
- Created an activity diagram to illustrate how
Clock
provides the current time in the application.
- User Guide:
#79, #128, #284
- Community: