Requirements Gathering

To effectively build an app, we first need to figure out what needs to be built.

gohkhoonhiang
Apr 21, 2023 | 6 mins read

Requirements Gathering

Let’s start with the requirements.

I need to build a simple accounting app for sole proprietors. There’re certain key features that need to be included in the app, and there’re certain assumptions to be made regarding the usage of the app.

Assumptions

Multi-user Support

Though this is an app for sole prioprietors, we assume that the business owner might hire an accountant to manage the business’s finances, so we will build multi-user support at the outset. However, to keep it simple at the start, we will not have admin features to manage multiple users. That means, each new user will just create her own account and be able to access all the data in the app created so far.

Power User

While there are accounting laws that require the business owner to keep proper records of all business transactions, as an app, we will allow the user to do anything that is possible with the data at her own discretion. This means that actions such as editing a record amount or deleting a transaction record are allowed in the app.

The only time when deletion is not allowed is if there are associated data, in this case, the user has to delete the associated data first and finally delete the record itself. This gives the user the full control over the scope of data to be deleted, rather than the app making the assumption to always delete all associated data.

Taxation Estimation

We assume that the business owner merely uses the app for tracking transactions due to operating the business, and so the taxation estimation is based only on business-related transactions.

Tag-based Time Tracking

The user needs to be able to log down the tasks she has worked on with start and end time, and tag each with one or more labels. The labels are free-form, but must be prefixed with the tag category, so that the user can know what the tag is intended for. For example:

TaskTagsStart TimeEnd TimeTotal Time
Documentationcompany:company-abcactivity:admin2023-04-03T14:23:522023-04-03T15:52:421 hr 28 min
Feature #13company:company-abcactivity:dev2023-04-03T16:12:052023-04-03T20:38:134 hr 26 min
Feature #9company:company-xyzactivity:dev2023-04-04T08:14:552023-04-04T13:24:525 hr 9 min

The user can add as many tags as possible to each task.

Configurable Invoicing and Receipts

With the information from the time tracker, the user needs to be able to filter by tags, and generate invoices for each grouping. For example, the user wants to invoice Company ABC for the month of April, so she will create filters like this:

  • company: company-abc
  • date_range: 2023-04-01 to 2023-04-30
  • activity: all
  • template: default

The invoice template should also be configurable per billable target, with these fields editable by the user:

  • Company name and address and logo
  • Bill to company/person name and address
  • Invoice number format
  • Invoice date and due date
  • Invoice currency
  • Unit of cost, eg. hours
  • Unit price based on tag category
  • Additional add-ons, eg. tax as a percentage
  • Deductions, eg. discounts as a fixed amount
  • Payment terms
  • Color scheme

There can be a few built-in templates for the user to choose from, or she can create a new template using custom HTML/CSS.

Alongside the invoices, the user may also need to generate receipts for payments received based on the invoivces.

Automatically generated invoice with the filtered tasks.

Receipts Upload

Where a service is offered on third-party platforms, eg. app stores, there will be no invoice generated, so there will be no income transaction created. Instead, the user should be able to import receipts generated from the third-party platforms and create a corresponding income transaction.

On the other hand, the user may also upload expense receipts as proof of documentation for tax deductions purpose.

For these documents uploaded, the user can tag them so that it will be easier for her to compile the documents later to submit as proof of documentation for tax filing purpose.

Setup Recurring Transactions

Where the user subscribes to recurring third-party services as part of business expenses, these expenses can be configured so that the user does not need to add them manually.

On the other hand, the user can also setup recurring income transactions where she receives regular payments from another party for her services and products, eg. if she offers a subscription plan to her clients.

Alongside the setup, the user can also create a reminder for each recurring expense so that she can see a reminder alert to make payment accordingly. The latest alert will show as a banner at the top of the page, and all the previous alerts will be accessible in an inbox page.

Currency Conversion

Where the user provides services to a different locale’s clients, she can configure the billing currency for the client and configure the exchange rate for each currency. This will be used for tax computation purpose.

Analytics Based On Time Tracking

Also, the user needs to be able to view from a dashboard, the time spent on various tasks and projects. For example, the user configures to generate a bar chart using filters like this:

  • chart_type: bar
  • data_source: work_logs
  • group_by: company
  • scale: month
  • range: 2023-01-01 to 2023-04-30

Automatically generated charts grouped by company tags.

Or if she wants to see the breakdown by activities:

  • chart_type: bar
  • data_source: work_logs
  • group_by: activity
  • scale: month
  • range: 2023-01-01 to 2023-04-30

Automatically generated charts grouped by activity tags.

Configurable Income Tax Structure

The user can configure the tax structure that is specific to her locale for the purpose of tax computation. Multiple instances can be configured, especially if the tax rates have changed between years. Then the user will be able to select which instance to use for the current year’s computation. For example:

Tier Min ($)Tier Max ($)Rate (%)Tier Max Payable ($)
0.0020,000.000.000.00
20,000.0130,000.002.00200.00
30,000.0140,000.003.50350.00
40,000.0180,000.007.002,800.00
80,000.01120,000.0011.504,600.00
120,000.01160,000.0015.006,000.00
160,000.01200,000.0018.007,200.00
200,000.01240,000.0019.007,600.00
240,000.01280,000.0019.507,800.00
280,000.01320,000.0020.008,000.00
320,000.01500,000.0022.0039,600.00
500,000.011,000,000.0023.0011,500.00
1,000,000.01999,999,999.9924.00239,760,000.00

The user can configure a tiered tax structure.

Alongside the tax structure, deductions are also configurable. This works by creating the categories eligible for deductions, and then later when entering an expense transaction, it can be tagged with the correct category for automatic computation for the deductions. Where the deductions do not depend on expense transactions, then a fixed amount can be configured. For example:

TypeCategoryRate (%)Max Deductible ($)
TransactionCourse Fees100.005,500
FixedEarned IncomeN/A100.00

The user can configure different categories for deductibles.

That’s All

That’s about all the features needed in the minimum viable product now. Let’s move on to designing the app!