Wednesday, January 25, 2012

Geldzin2: Final Beta Released

I've just deployed the final beta of my little financial web application (Geldzin). The beta's business goals were to put all core functionality in place while driving for a usable product that would demonstrate the trajectory I envision for personal finance management. The core functionality includes transaction log, tracking financial and debt accounts, categorization of transactions, distribution of income, a couple of spending reports, emergency fund, and charity&giving emphasis. Below is a view of the digest (main) page:


The digest/dashboard provides a snapshot of the overall financial picture. From top-left clockwise, it shows information about your bank and cash accounts (collectively called financial accounts), your credit cards and loans (collectively called debts), a trending chart of total expenses versus total deposits/income over the last 6 months, status of the emergency fund, the most active spending/budget items, and finally the most recent transactions logged. I have room for one more widget at bottom-left but haven't decided what it will be.

While the initial functionality is in place and a useful product is available to users (my wife and I have been using this webapp for over a year), I also had technical goals that this phase needed to meet:
  1. I wanted a real project to hash out my knowledge of Hibernate 3.x. This is the technology I am using for persistence management and database connectivity. The database application itself is MySQL 5.x.
  2. I wanted a real project to play with Spring MVC, which I use to receive all client requests and control access to data. The Spring configuration runs in an Apache Tomcat 6.x web container.
  3. I wanted somewhere to explore Ext JS 3.x, which is what I use for the UI and client/server communication.
  4. I've wanted to exercise the project build capabilities of Maven 3.x, which is what I use to compile and build this project and manage dependencies and releases. In tandem with Maven, I also use Subversion SVN for version control.
  5. I also wanted to improve my development process to include automated testing (using TestNG and Selenium), automated/scheduled releases (weekly in a testbay) and automated data import from old databases to new schema. For some of these, Perl saved the day.
  6. Finally, I wanted to understand the intricacies of hosting Java application on the web. I use eApps, which provides a VPS (virtual private server) with the database application, Tomcat and JVM, among other things, for about $250/year.
  7. Figure out what it takes to obtain a patent for software like this.
All these goals were met during this phase (except #7 which is still in the works). The next phase will focus on how to create better UIs (user interfaces), webapp themes (look and feel), producing technical documents (quick start and user guides, source API), mobile sites (using a framework like jQuery Mobile), how to estimate project development costs better (financial and time), and a few other business features in the release candidate (RC1). It is a learning process.

Thursday, December 15, 2011

Geldzin2: Emergency Fund

In version 1.9 (build#77), I implement the concept of an emergency fund. The emergency fund is money that has been saved specifically for emergencies. An emergency is "something unexpected that has major impact on your family". Things that can be saved for or that can wait are not emergencies. The emergency fund "turns crises into inconveniences" (quoting Dave Ramsey both times).


Geldzin2 allows users to specify what their emergencies are. Anything you can think of that you want to have money available for when it suddenly happens should be considered an emergency. The sum estimate is the emergency fund goal. The minimum amount should be held in cash (ready to spend on a moment's notice), and the rest held in a bank account that you do not use for everyday expenses (separate from your main checking account).

During distribution, emergencies are prioritized higher if the minimum amount has not been achieved. Otherwise, they are considered after debts are taken care of. (See image below).

The app considers various factors to determine whether current income should be distributed towards emergencies, including the fund goal, minimum, available cash and emergency account balance, and anything that might have been distributed before but not yet transferred to the account.

To access the emergency fund feature, log into the app and navigate to {Emergency Fund}.

Monday, December 12, 2011

Geldzin2: Public Beta Availability

The latest version of the app (version 1.8) is considered a bonified public beta, ready for release to the masses in January 2012. At this point, users can perform basic financial tasks such as create a budget and categories, track financial accounts and debts, log daily transactions (deposit, expense, income), and distribute income among competing obligations. It also incorporates the idea of charity.

Over the next few weeks, progress towards a milestone version (M1) will involve implementation of other key features, a theme, and reports (including the dashboard). The second release milestone (M2) will bring under-the-hood optimizations and a complete user guide. The third release milestone (M3) will add a mobile website and an Android/iOS app. I project that the final release (version 2.0) will drop around June 2012.

It takes me longer to complete each milestone now because I am a one-man operation with a wife, day job, and hobbies that needs my time. Soon, programming marathons will no longer be possible too, but I will keep pushing to complete this project sooner than June 2012.

Friday, December 09, 2011

Geldzin2: Transactions

In version 1.7 (build#64), I introduce the expected feature of transaction management. Every financial management app provides a means for users to log their expenses, deposits, and transfers. In Geldzin, this feature integrates with categories, debts and financial accounts (and behind the scenes, it affects distributions).


As you can see in the screenshot above, transactions are displayed with the latest on top. Amounts are color-coded (red for outgoing money, blue for incoming money), and linked categories and financial accounts are shown. Expenses can have splits (more than one category assignment). The current version allows entry of income (via Income Distribution), deposits, and expenses. Whenever you use a category that is budgeted, its distributions are affected. For example: an expenditure using a budgeted category will deduct the transaction amount from that month's distribution for the category.
Using the menu immediately above the transaction display, you can also choose to view transactions (1) in a given date range, or (2) for a particular financial account. A future version will provide more comprehensive reports so you can analyze transactions and see your financial trends.

The lifestyle principle is that you should know where your money is coming from or where it is going. With data like this, all kinds of analysis and trending can be done to help make good financial decisions and identify opportunities for efficiency. This data can, for example, be used to refine your budget.

To see this feature in action, access the webapp at http://jubilee.homeip.net:84/geldzin2/ and login. [Demo account is username guest and password geldzin]. Navigate to {Transactions}. Select an option in the {Create New Transaction} dropdown to create an expense, deposit, or distribute income.