Building a New Feature

Submitting a Feature Request
Please visit How to Request a New Feature for an overview of submitting a feature request.

Writing the Functional Specification

The steps below will outline additional details to include to expand your feature request into full functional specification.

You will then add these details into a functional specification template that you can then submit for discussion to the mifos-users mailing list.

The following can be copied over from your initial feature request.

Feature Request Name:

Name of feature. Describe the feature in 5 - 7 words. For example: "Declining balance interest calculation" or "Displaying previously saved attendance values in Bulk-Entry".

Status:

Once the feature is posted to Development Project Pages, it is good to update this field so that developers know how current the requirements are.

Contact details of person who last updated document:

Again, this field is required once you post it to Mifos.org.

Feature Summary:

Brief 2-3 sentences summarizing the feature. Some of this may be explained in the background section. An example for "declining balance" would be: This feature would allow MFIs to create loan repayment schedules with equal installments and interest based on the declining balance formula.

Background:

The section provides information describing the issue for folks who might not be familiar with Microfinance methodology or how Mifos handles the current use case. For example, background information for the "Declining Balance" feature would explain that Mifos currently only supports flat interest calculation, would explain what flat interest calculation is (since this is an unfarmiliar concept for people in the US), and explain how declining balance works. Background information for the "Displaying attendance in Bulk Entry" would give a brief summary of the bulk-entry feature and explain that when a user returns to the same bulk-entry screen, previously saved attedance values aren't displayed.

Business Need for feature: Optional

Brief 2-3 sentences explaining why this feature is important/necessary. This is your opportunity to convince a volunteer how important your feature request is and make him/her excited to work on it! An example for "Displaying attendance values in bulk-entry" would be: For many MFIs, there will be the scenario of a user needing to return to the bulk-entry screen to finish inputting all transactions that were collected at the center meeting. We need the previously entered attendance data to be displayed in order to reduce data errors.

FEATURE DESCRIPTION

In this section provide as much detail as possible about the business processes or products and services the new feature would support as well as step-by-step instructions for how it would be used. When writing the step-by-step instructions you should consider all the different scenarios a user might encounter in working with the new feature. Typically these scenarios are broken down into two types.

The first is called the "Primary Flow." This is the most common way a user would interact with the feature. The "Primary Flow" assumes the user encounters no errors and completes the task they were working on. Other scenarios are called "Alternate Flows." These explain how errors are handled, what happens if the user decides to click on the cancel button, etc. Refer to the Feature Request topic in the Mifos Wiki for more details on writing the Primary Flow and Alternate Flow(s). If at all possible it is also useful to provide mock ups of how the user interface for the new feature would look. You can attach images of the UI when you enter extra information in the next step.

In this section, you walk through a detailed step-by-step process of how users interact with the feature or enhancement. The Primary Flow explains the most common way a user would interact with the feature. This typically means that the user encounters no errors and completes the task they were doing. After that, you also need to specify Alternate Flows. These typically explain how errors are handled or how what happens if the user decides to click the cancel button, etc.

Primary Flow:

Walk through step by step or page by page (if appropriate) how a user will access the feature and interact with the feature. Be as specific as possible, including details around:

Alternate Flows:

Examples of alternate flows may include editing, deleting, error cases, etc. Each of these separate flows should have their own "alternate flow" section.

UI Screens:

If at all possible, include UI mock-ups of the feature. A picture is worth a thousand words.

Additional information: