This application was created in order to investigate how real options financial theory could be applied to a backlog of requirements, and if the results of this application could be used to produce release plans.
In real options theory, an option is considered to be the right – but not the commitment – to undertake certain business decisions regarding an asset, such as purchasing, expanding, or abandoning. “Real” denotes that the assets being considered are generally tangible.
Suppose that Team A is a team of software developers who have developed and currently maintain a live application. This ream works in two-week sprints, and release at the end of every sprint. In 12 weeks, or six sprints, Team A has an important meeting with their sup[ervisors, and need to be able to show as much new functionality as possible.
At the beginning of every sprint, Team A holds a planning meeting to decide which of the requiremnets in their backlog should be worked on next. During these discussions, they take the followibng factors into consideration:
- How valuable that requirement is to the overall application;
- What the cost of implementing that requirement is, i.e. how much effort is required;
- How risky it is to work on the requirement in this sprint - how much could the value or cost vary from their current values;
- How much time is left before the requirement "expires" and is no longer a valid feature to be implemented.
For the purposes of experimentation, it is assumed that all of the requirements to be considered have been assigned a score for value, cost, and risk, as well as an indication of how long Team A has before each requirement will expire, measured in the number of sprints remaining.
Team A has a limit on the cost that can be expended per sprint. No more than 15 points can be included in each iteration.
The Tomato Garden application is composed of the following components:
- A front-end user interface that will be used to visualise the requirements in the options space and navigate from release to release.
- A back-end database that stores the backlog of requirements. It will also store the release plans that are generated by the application, to avoid unnecessary re-computation.
- REST APIs to communicate between the front-end and the back-end.
A JSON file containing the requirements is loaded in by the front-end application, which will then push the requirements to the database. This step should only be carried out once, during the application setup; once the requirements have been added to the database, data will then be transferred between the front-end and back-end exclusively via API calls.
The code for the Loopback app (the back-end) is located in the root directory of this repository. The front-end React app is in a subfolder of this directory, called client_src. Both Loopback and React applications run on port 3000 by default, resulting in a conflict when the two are launched at the same time. However, the React app is able to detect if something is already running on that port, and will suggest to the user that it should run on port 3001 instead. As such, the two apps are able to run simultaneously provided that the Loopback app is launched first. If it is launched second, it will throw an error saying that port 3000 is already in use, and fail to launch.
Assuming that MongoDB has been installed and the repository containing this project has already been cloned, Tomato Garden can be launched by following these steps:
- In a Terminal window, run the command
mongod
to launch the Mongo database; - Navigate to the tomato-garden directory in the Terminal window and run the command
npm install
to install the dependencies the Loopback application needs; - In the same directory, run the command
node .
to launch the Loopback application; - Navigate to the client_src directory in the Terminal window and run the command
npm install
to install the dependencies the React application needs; - In the same directory, run the command
npm start
to launch the React application. This will open localhost:3001/ in a new tab on the default browser, allowing the user to begin using Tomato Garden.
MongoDB: x
Loopback: x
React: x
The article that inspired this project: x