This document is a portfolio of the ichifund software engineering project I have been a part of and it is a means of highlighting my contributions to this project, and to my potential as a software engineer.

PROJECT:IchiFUnd


Overview

For our software engineering project, my team of five software engineering students, including myself, were tasked with either improving on or modifying the existing addressbook project into a new application. We decided to opt for the latter of the two options and morph the addressbook codebase into a command-line based finance management tool which we named "Ichifund". Ichifund is a desktop application targeted towards students who need to manage their finances over a desktop application and intends to aid them with several money accounting needs, such as tracking budgets, loans, keeping track of transactions over time, and generating data and analysis on all of these factors. All of this intends to package the various complex tools required to manege personal finances into a single application.

Summary of contributions

  • Major enhancement: added Application support for the Loans feature

    • What it does: allows the user to add Loans, remove Loans and edit them on the fly.

    • Justification: This feature improves the product significantly because a user can can keep track of Credit and Debit, contrary to just active transactions. Static budgets and transactions don’t keep track of money that is owed to a different party.

    • Highlights: This enhancement affects the use case of the Application and adds to the value the user can potentially receive from the product.

    • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}

  • Code contributed: [Functional code] [Test code] {give links to collated code files}

  • Other contributions:

    • Project management: *

    • Documentation:

      • Did cosmetic tweaks to existing contents of the User Guide: #14

    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42

      • Contributed to forum discussions (examples: 1, 2, 3, 4)

      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)

      • Some parts of the history feature I added was adopted by several other class mates (1, 2)

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.

Marking Loan Paid: paid

Mark loan as paid and remove it from the list.
Take any loan, with an outstanding loan amount, and when it is paid off, it can referenced by it’s index to be removed.

Format: pay i/INDEX

Loan 3 help
Figure 1. Usage of 'paid'

Analytics

Have you ever wondered where all your money is going? Our analytics feature provides deeper insights into your incomes and expenditures, so that you can take control of your personal finances.

On startup, the analytics tab is empty.

With each analytics command entered, the analytics tab is updated with the list of command results. The image below gives an overview of the GUI of the feature:

AnalyticsScreenshot
Figure 2. Analytics tab

The list of command results comprises several result cells. We give a further breakdown of the information each cell displays in the following image:

AnalyticsCell
Figure 3. Information in an analytics cell
For all commands in the analytics feature, if the optional arguments m/MONTH and/or y/YEAR are not provided, results for the current month and/or year in the system time will be displayed.

Viewing expenditure trend: expenditure

Format: expenditure [y/YEAR]

You may have committed to reducing your expenditure, but you are unsure if you are on the right track. With the expenditure command, you can take a quick look at your monthly expenditure trends to measure your success in cutting your expenditure.

Suppose you made a New Year’s resolution to track your personal finances using IchiFund, and you have been diligently adding transactions since the start of 2019. After entering the expenditure command, the GUI of IchiFund may look like this:

expenditure

Examples:

  • expenditure
    Displays monthly expenditure trend for current year.

  • expenditure y/2019
    Displays monthly expenditure trend for 2019.

Viewing income trend: income

Format: income [y/YEAR]

Perhaps you are contemplating asking for a promotion at your part-time job or seeking a better-paying place of employment. The income command gives you a clear overview of your monthly income trends, allowing you to make more informed decisions regarding your source of income (or the lack thereof).

Suppose you work part-time at a restaurant, but business has been slow for the past few months, and your boss decides to give you a pay cut. After entering the income command, the GUI of IchiFund may look like this:

income

Examples:

  • income
    Displays monthly income trend for current year.

  • income y/2019
    Displays monthly income trend for 2019.

Viewing balance trend: balance

Format: balance [y/YEAR]

Maybe you have set a target for yourself to accumulate a certain amount of money in your savings account by the end of the year. With the balance command, you will be able to take a look at your monthly balance (income - expenditure) trends, and determine if more needs to be done to hit your target.

Let’s say you have been saving up for a new laptop as your old one is due for a repair. With the recent pay cut, you are unsure if you will be able to save up enough money to purchase the laptop in time for the start of the next school semester. After entering the balance command, the GUI of IchiFund may look like this:

balance

You now know that you are on track to getting your laptop in spite of the pay cut.

Examples:

  • balance
    Displays monthly balance trend for current year.

  • balance y/2019
    Displays monthly balance trend for 2019.

Viewing expenditure breakdown by category: breakdown

Format: breakdown [m/MONTH] [y/YEAR]

Perhaps you have entered the expenditure command, and you are now aware that you are spending more than you would like to, but you are still unsure what is it exactly that you are spending the bulk of your money on. With the breakdown command, you will be given a clear breakdown of your expenditure by category, and hence be able to pinpoint the categories that have larger contributions to your expenditure.

It is now mid-November, and your expenditure has exceeded half of your monthly budget. Clueless as to what you could have spent on, you enter the breakdown command, and the GUI of IchiFund may look like this:

breakdown

Examples:

  • breakdown
    Displays expenditure breakdown by category for current month.

  • breakdown m/7 y/2019
    Displays expenditure breakdown by category for July 2019.

Viewing expenditure category ranking chart: catrank

Format: catrank [m/MONTH] [y/YEAR]

What if, instead of the breakdown of your expenditure by category, i.e., breakdown, you wanted to zoom in on the top 2 largest contributing categories to your expenditure so as to cut down on your expenditure more effectively? With the catrank command, you can take a look at your expenditure category ranking chart, and hence be able to zoom in on and cut down on expenditure for categories that have the largest contributions to your expenditure.

The expenditure category ranking chart is in decreasing order, i.e., the categories with higher expenditure will be at the top of the list, and the categories with lower expenditure will be at the bottom of the list.

As the month comes to a close, you realise that you have transactions from many categories, and running the breakdown command returns you a view that is too cluttered for your liking. After you enter the catrank command, and the GUI of IchiFund may look like this:

catrank

With the catrank command, you are now able to identify that it must have been the trips to the beauty salon and the Grab rides you take on a daily basis that have contributed to your overspending, and that perhaps you should consider painting your own nails and taking public transport to school instead.

Examples:

  • catrank
    Displays expenditure category ranking chart for current month.

  • catrank m/7 y/2019
    Displays expenditure category ranking chart for July 2019.

Viewing expenditure ranking chart by month: mthrank

Format: mthrank [y/YEAR]

If you have a tendency to overspend in certain seasons or on certain occasions, with the mthrank command, you can look at your expenditure ranking chart by month, swiftly identify the months that you spend most in and take steps to reduce your expenditure in the same few months in the years to come.

The expenditure ranking chart by month is in decreasing order, i.e., the months with higher expenditure will be at the top of the list, and the months with lower expenditure will be at the bottom of the list.

Let’s say you have always planned overseas trips over the summer break. After entering the mthrank command, the GUI of IchiFund may look like this:

mthrank

You are now aware that the expenditure on and during these overseas trips are burning a hole in your pocket, and can take measures to set a budget before going on these trips or reduce the frequency of such trips.

Examples:

  • mthrank
    Displays expenditure ranking chart by month for current year.

  • mthrank y/2019
    Displays expenditure ranking chart by month for 2019.

Viewing expenditure ranking chart: exprank

Format: exprank [m/MONTH] [y/YEAR]

If you are keen to identify the biggest purchases you make so that you can cut your expenditure swiftly, the command exprank is what you are looking for. exprank allows you to look at your expenditure ranking chart.

The expenditure ranking chart is in decreasing order, i.e., the bigger purchases will be at the top of the list, and the smaller purchases will be at the bottom of the list.

Let’s say you have made a couple of big purchases over the course of the year. After entering the exprank command, the GUI of IchiFund may look like this:

exprank

You are now aware that cutting expenditure on luxury items and gadgets would probably do wonders for the health of your wallet.

Examples:

  • exprank
    Displays expenditure ranking chart for current year.

  • exprank y/2019
    Displays expenditure ranking chart for 2019.

  • exprank m/7 y/2019
    Displays expenditure ranking chart for July 2019.

FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous IchiFund folder.

Command Summary (v1.4)

  • Help : help

  • Exit : exit

  • Transaction Add : add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [d/DAY] [m/MONTH] [y/YEAR] [ty/TRANSACTION_TYPE]

  • Transaction Edit : edit INDEX [de/DESCRIPTION] [a/AMOUNT] [c/CATEGORY] [d/DAY] [m/MONTH] [y/YEAR] [ty/TRANSACTION_TYPE]

  • Transaction Delete : delete INDEX

  • Transaction Filter : filter [m/MONTH] [y/YEAR] [c/CATEGORY] [ty/TRANSACTION_TYPE]

  • Repeater Add : add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [ty/TRANSACTION_TYPE] [so/MONTH_START_OFFSET] [eo/MONTH_END_OFFSET] sm/START_MONTH sy/START_YEAR em/END_MONTH ey/END_YEAR

  • Repeater Edit : edit INDEX [de/DESCRIPTION] [a/AMOUNT] [c/CATEGORY] [ty/TRANSACTION_TYPE] [so/MONTH_START_OFFSET] [eo/MONTH_END_OFFSET] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR]

  • Repeater Delete : delete INDEX

  • Repeater Filter : find KEYWORD [MORE_KEYWORDS]

  • Loan Add new : add a/Amount [d/DATE] [n/NAME] [d/DESCRIPTION] [sd/DAY] [sm/MONTH] [sy/YEAR] [ed/DAY] [em/MONTH] [ey/YEAR]

  • Loan Edit : add i/Index a/Amount [d/DATE] [n/NAME] [d/DESCRIPTION] [sd/DAY] [sm/MONTH] [sy/YEAR] [ed/DAY] [em/MONTH] [ey/YEAR]

  • Loan Pay : pay i/Index

  • Budget Add : add de/DESCRIPTION a/AMOUNT [c/CATEGORY] [d/day m/MONTH y/YEAR]

  • Budget Delete : delete i/INDEX a/Amount [n/Name]

  • Budget Find : find [KEYWORDS]…​

  • Expenditure Trend : expenditure [y/YEAR]

  • Income Trend : income [y/YEAR]

  • Balance Trend : balance [y/YEAR]

  • Categorical Breakdown : breakdown [m/MONTH] [y/YEAR]

  • Categorical Ranking Chart : catrank [m/MONTH] [y/YEAR]

  • Month-Based Ranking Chart : mthrank [y/YEAR]

  • Ranking Chart : exprank [m/MONTH] [y/YEAR]

Adding loan: add

Format: add a/AMOUNT [c/NAME] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR] [de/DESCRIPTION]

You can use the add command to create a loan. This also creates the other objects associated with the created repeater.

The optional arguments take the following default values if left unspecified:

Argument Default values

Description

"No Description"

Name

"No Name"

Start Day

"12"

Start Month

"12"

Start Year

"2019"

End Day

"1"

End Month

"2"

End Year

"2020"

Loan 1 help
Figure 4. Usage of 'add'

Constraints:

  • Loan end must not occur before it’s start.

  • Description, Name and Dates are Alphanumeric.

Example:

  • `add a/420.42 n/Felix Kjellberg sd/12 sm/12 sy/2019 ed/23 em/2 ey/2020 de/Borrowed for apple earpods `

This creates a loan of 420.42 for "Buying airpods" taken on 12 December 2019 to 02 February 2020.

Editing new loan: edit

Format: edit INDEX [a/AMOUNT] [de/DESCRIPTION] [n/NAME] [sm/START_MONTH] [sy/START_YEAR] [em/END_MONTH] [ey/END_YEAR]

You can use the edit command to edit a loan. This can change any attribute(s) of the loan.

The loan fields will only be updated where the arguments are specified.
Loan 2 help
Figure 5. Usage of 'edit'

Constraints:

  • Loan end date must not occur before loan start date.

  • Index must be specified, no change occurs otherwise.

Example:

  • edit 1 de/Current Student Loan a/99999.99 n/DBS SG Bank sd/1 sm/1 sy/2020 ed/30 em/12 ey/2021

This edits the first loanr in the current list to - $99999.99 loan taken on 1st January 2020 and to be paid back by 30th December 2021.

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.

Loans

Adding Loan : add

Overview

This feature allows the user to add a loan in IchiFund. Adding a loan also creates the default values associated with the added loan.

Implementation

The add command is facilitated by the Logic and Model components of the application. Given below is an example usage scenario of how add behaves at each step.

Step 1: The user executes add a/42.15 d/Utilities sd/1 sm/1 sy/2019 ed/31 em/12 ey/2019 to add a loan for utilities with an amount of $42.15 taken on 1st January 2019 and to be returned on 31st December 2019.

Step 2: LogicManager uses IchiFundParser#parserCommand() to parse the input from the user.

Step 3: IchiFundParser determines which command is being used and creates the respective AddLoanCommandParser parser with the user’s input as an argument.

Step 4: AddLoanCommandParser does a validation check on the user’s input before creating and returning an AddLoanCommand with desired Loan as an argument.

Step 5: LogicManager uses AddLoanCommand#execute() to add the Loan and the associated Loans into the Model which is handled by ModelManager. In doing so, it also fetches the LoanId counter tracked by the Model, sets it as the created Repeater's unique id, and increments the counter in the Model by 1.

Step 6: AddRepeaterCommand returns a CommandResult to the LogicManager which is returned back to the user.

Paying Loan : pay

Overview

This feature allows the user to pay off a marked loan in IchiFund by index.

Implementation

The pay command is facilitated by the Logic and Model components of the application. Given below is an example usage scenario of how pay behaves at each step.

Step 1: The user executes pay 2 to pay off the loan in the 2nd index.

Step 2: LogicManager uses IchiFundParser#parserCommand() to parse the input from the user.

Step 3: IchiFundParser determines which command is being used and creates the respective PayLoanCommandParser parser with the user’s input as an argument.

Step 4: PayLoanCommandParser does a validation check on the user’s input before creating and returning an PayLoanCommand with desired Index as an argument.

Step 5: LogicManager uses PayLoanCommand#execute() to delete the Loan from the Model which is handled by ModelManager.

Step 6: PayLoanCommand returns a CommandResult to the LogicManager which is returned back to the user.

Adding and modifying a Loan

  1. Adding a Loan while other loans are present

    1. Prerequisites: List all loans. Multiple loans in the list.

    2. Enter `add a/420.42 n/Felix Kjellberg sd/12 sm/12 sy/2019 ed/23 em/2 ey/2020 de/Borrowed for apple earpods `
      Expected: Loan is added to the list. Details of the added loan shown in the status message.

    3. Enter add a/220
      Expected: Loan is added with default values. Loan Details shown in the status message. Status bar remains the same.

    4. Enter add n/Felix Expected: No amount given error is shown. No Loan is added to the list. The status shows correct format to enter.

    5. Other incorrect delete commands to try: add, add a/24 n/123
      Expected: Similar to previous.

  2. Editing Existing loans

    1. Prerequisites: List all loans. Multiple loans in the list.

    2. Enter 'edit 2 a/220 n/NewName sd/12 ey/2012'
      Expected: First loan on the list is changed to new assigned values. No other loans or entries are changed.

    3. Enter 'edit 1 n/NewName sd/12 ey/2012 d/New Description for the Loan'
      Expected: First loan on the list is changed to new assigned values including description. No other loans or entries are changed. Other values are derived from existing entry.

    4. Enter 'edit a/220 n/NewName sd/12 ey/2012'
      Expected: Wrong format for edit command is shown in status. No Loan is edited.

    5. Other incorrect delete commands to try: edit, edit 5
      Expected: Similar to previous.

  3. Paying off Existing loans

    1. Prerequisites: List all loans. Multiple loans in the list.

    2. Enter 'pay 1'
      Expected: First loan on the list is removed from list. No other loans or entries are changed. Status bar indicates deletion.

    3. Enter 'pay a/220'
      Expected: Wrong format for pay command is shown in status. No Loan is removed. Status shows correct format of command.

    4. Other incorrect delete commands to try: pay, pay a
      Expected: Similar to previous.