budgeting

Josh Sled jsled@asynchronous.org
Mon, 1 Oct 2001 20:47:09 -0700


On Mon, Oct 01, 2001 at 04:04:12PM -0700, nigel_gnucash-devel@unos.net wrote:

| Maybe what we should really be talking about is the *function* of a
| budgeting subsystem.

Yes.

Below is a slightly-modified version of something I posted a while ago.
Please review and let me know what you think...  I guess I'm most curious
about your comments on the user experience/flow ... not the initial/setup
stuff so much, but more the applying budget to time frame... how does
that work, and what useful info do you want it to provide you?

...jsled

----------

Budgeting in GnuCash

   jsled, 2000.11.09T0112, 2000.11.20T2337
   
                                    Preface
                                       
   This document describes an approach to take at the problem of
   introducing functional budgeting into GnuCash. It presently borrows
   few ideas from GnuCash, and can be considered a general take at the
   problem of budgeting. It is not a design document, by any stretch of
   the reading; that will come later. It is more a set of notes relating
   to budgeting, and the basics of a framework for how budgeting might
   work.
   
   In this approach, budgeting is a primary yet optional function of
   GnuCash. It is an important tool for the user who wants to have a good
   grasp on their financial state; it is not a type of report. Budgeting
   is not strictly for people with income barely meeting their expenses
   [though the tool should be useful to them], nor strictly for the user
   with "extra" income looking for a way to reach their numerous savings
   goals. It should be flexible and functional enough to serve both
   users.
   
                                   Budgeting
                                       
   "budget" [Merriam-Webster]
          
Main Entry: 1bud-get
Pronunciation: 'b&-j&t
Function: noun

1 chiefly dialect : a usually leather pouch, wallet, or pack;
also : its contents
2 : STOCK, SUPPLY
3 : a quantity (as of energy or water) involved in, available
for, or assignable to a particular situation; also : an account of
gains and losses of such a quantity

4 a : a statement of the financial position of an administration
for a definite period of time based on estimates of expenditures
during the period and proposals for financing them
b : a plan for the coordination of resources and expenditures
c : the amount of money that is available for, required for,
or assigned to a particular purpose - bud-get-ary /'b&-j&-"ter-E/
adjective

   A budget is a tool by which a user can compare expected expenses to
   the history of actual expenses, for the purposes of better allocating
   income. Once realistic budgetary limits are obtained, the user can
   then project forward to plan for future expenditures. The goal with
   any future-based financial tool is to manipulate the difference of
   income to expenses, in order to further utilize available financial
   resources.
   
                               Functional Areas
                                       
   The basic idea of a budget is as follows:
    1. Define recurring expenses.
    2. Sum.
    3. Subtract from income.
    4. Adjust so difference is >= 0.
       
   ... but we can do much better.
   
Basic

   The basic concepts in a budget are income, recurring expenses and
   time. Income can be fixed [as in salary or loans] or variable [such
   as in primary/suplemental income via a "as-desired" employment
   situtation or gifts/winnings]. Recurring expenses [now: "expenses"]
   can be typed into one of the following categories:
   
  Expense category types
  
   expense type examples notes
   fixed rent, loan repayment, cable, internet, insurance
   variable phone $[30,90], food $[400,600], gas $[25-35, every two
   weeks]
   seasonal utilities, gifts These will definitely be 'variable' in the
   first cut, and maybe will stay as that; but we can do so much better!
   :)
   sporadic car repair, emergencies, clothing, computer
   
   Time is hard to nail down. For some categories, the expense is
   incurred on a fixed date [rent is due on the first of the month; I pay
   it the first weekday after the first]. For other expenses or
   situations, the expense may acrue during a time-span. For instance, in
   my three-person apartment, I make a phone payment during the middle of
   the month [around the 20th], then collect payments from my
   apartment-mates during some amount of time after this. However, the
   budgeting system should not impose dealing with this situation on
   users with a simpler situation.
   
   As with most things financial, the budget is a zero-sum game. If you
   over-spend in one area, you must find some place to take this from.
   Likely candidates are [in order of priority]:
    1. Unallocated income/savings [some catch-all category to enable
       0-balance].
    2. Other budget areas which are under-run.
    3. Savings goals [perhaps prioritized themselves; saving for a new
       Y-pipe is << important than grad school].
    4. Lines of credit/advances [== options...]
       
   A budget may have a start date, but not necessarily an end date, or
   some fixed amount of time for which it applies. For instance, most
   budgets will start at some arbritary time when the user decided to sit
   down and make the budget, but may actually be based on the history for
   6 months past. Or, it may be a budget which won't start until some
   future, anticipated date [after planned, upcoming life changes]. Most
   budgets will continue indefinitely, but may be modifed along the way;
   they will not be used after major financial/life changes occur, and we
   probably don't have to deal with that event.
   
   The budget tool must allow the user to explicitly modify expected
   expenses based on new info. For example: when I change my wireless
   plan from "$40/mo + 200 min/mo + (overtime * $0.30/min) = ~$200/mo" to
   "$90/mo + 700 min/mo + (overtime * $0.30/min) = $90/mo", the budget
   should be able to take this into account from the time of the change
   forward. The user will probably have to be queried as to what to do
   during the time-span affected by the switchover. I think this
   can/should [eventually] use the same mechanism as "What If?" engine
   described below.
   
   The default period of operation for the budget tools is one month.
   However, we have knowledge of the dates [some/most] expenses occur on,
   and can thus look at a day-by-day breakdown as well. Something I'd
   like to see is the cash-flow chart associated with a given month,
   showing how much should be in my checking account on every day as
   income comes in, and expenses are paid out. Extrapolating, I'd like to
   see a less-dense cash-flow chart for each of my savings goals over the
   months/years [hiding the complexity of day-to-day expenses below some
   threshold]...
   
Advanced

   At the advanced level of a budget, the future goals are of primary
   importance, but we must look to the past [both near and far] to a)
   determine budget constraints and b) further ensure those contraints
   are realistic.
   
   A key component of the advanced budgeting system will be planning and
   tracking savings for future goals/uses. These goals generally have a
   time-horizon, and contributions to these savings goals are not
   compulsory, but instead dependent on external pressures of the user.
   
   The savings for these goals in not generally in nicely deliniated
   boxes [let's say physical], but often aggregated into one or mulitple
   places [the money-market account holding both emergency funds and some
   un-allocated portion of long-term/retirement savings waiting to be
   moved into a mutual fund, for instance].
   
   Another component of the advanced budget is a new budgetary category
   for seasonal/external expenses. These are expenses which are dependant
   on time or some external index. This generally applies to fuel, more
   specifically to utilities bills, and automobile gas. In an ideal world
   these would have externally-accessible indices for tracking, somewhat
   like stocks. The projected December gas & electric bill would look for
   the current price of natural gas, and multiply by the
   historical/expected consumption amount to determine the most-correct
   budgetary amount.
   
  Workbench
  
   The Workbench is concerned with "what-if" questions... what if I want
   to take a trip to Tahiti... how much longer will it take to save for
   the new car?
   
   The main component of the workbench is a set of Changes which can be
   in one of two states: inactive or active. Active Changes modify the
   budget, and allow the user to play with different ideas. Inactive
   Changes sit around, waiting to be applied [natch].
   
   Examples of Changes include:
     * analog vs. digital cable
     * eating out more/less?
     * loan repayment schedule changes [more/less vs. inflation, savings
       goals]
     * vacations
     * investments... [partially] selling for saving goals vs. continued
       holding, &c. [but how to handle?]
     * conditional bonuses
       
   A simple mockup of this interface is something like...
    inactive changes                 active changes
   +--------------------+           +--------------------+
   | work more overtime |           | increase grad contr|
   | trip to tahiti     | ---add--> | quit smoking       |
   |                    | <-remove- | take lunch to work |
   |                    |           | contribute to unice|
   +--------------------+           +--------------------+

   This allows the GnuCash user to experiment with different
   budgeting/lifestyle tactics, showing the net effect of changes on
   their goals [and perhaps history, for reinforcement].
   
General Notes

   The budgeting subsystem should not be so integrated that is cannot be
   used in pieces. For instance, the change workbench should not require
   that all expenses be categorized and allocated into budgetary roles.
   However, functionality may be limited unless this is done.
   
User experience, flow

    1. "Create Budget" [menu, button]
         1. Budget parameters [name, time range [start date, optional end
            date]].
         2. Link to [subset of] accounts which hold funds.
         3. Link to expense accounts root
         4. Link to income accounts [perhaps root].
            Define as:
               o Fixed/salary
               o Variable [per hours put in, stuff done]
    2. Define recurring expenses, place temporally:
         1. Link to relevant expense category [or categories]
         2. "learn" [register history]/have user state budget category
            extremeties
         3. associate with date [range, sub-dates]
         4. Explode, re-define "hard" expenses [food, smoking,
            entertainment]
    3. Apply budget to time frame [repeatedly, at any point in time]
         1. Do the math
         2. Do overflow math [w/ user input] - over in one area can be
            made up for by under/extra in other area.
         3. Recommend changes
         4. report: update "financial picture"
       
                              Development Phases
                                       
Phase 0

     * requirements - I'd like to talk/interview people I know to have
       them explain how a budget should/would work... a user-centric
       requirements gathering; hopefully others can do the same.
     * UI/screen mockups
     * functional spec/design doc [how to implement into existing GnuCash
       codebase]
       
Phase I

     * Take into account basic budgetary concepts:
          + recurring, fixed expenses [rent, cable, loan repayments]
          + recurring, variable expenses [utilities bills, phone, daily
            expenditures, food, friday-nights]
          + categorized expenses/budgetary categories
               o limits
          + savings goals [very limited]
     * assign limits to categories on a monthly basis
          + extrapolate into daily expenses
     * time-series-based UI
     * comparison to history
       
Phase II

     * Savings goals, allocated-asset tracking.
     * Better understand grouped expenses [jsled's day-to-day expense
       category]
     * Something to handle sporadic events [auto repairs, &c].
     * Seasonal/external expenses? [Maybe Phase III]
     * First version of Workbench/What-If? scenarios/Changes.
     * [1]pre-defined categorizations
     * Druids:
          + savings goal calculators
          + loan-repayment calculator
          + Mortgage, &c.
     * Cash-flow chart [something for the new main window?]
       
Phase III

     * Flesh out Workbench.
     * GIGO: allow for better projections by understanding expenses.
          + think of utility bill as: <kWhrs * cost/kWhr> + <therms *
            cost/term> + <taxes>, track monthly terms used [perhaps
            national/regional average], and multiple by current costs...
          + gas: track auto's gas mileage, and current regional gas rates
          + taxes: while not xforming into a tax-mgmt app, understand at
            least the tax bracket, and have an implicit tax-savings-goal
            for Apr 15th.
          + food: [2]my food breakdown is a good first cut; refine with
            experience.
          + some nightly catch-up input thingy -- for people who want
            that much detail on their budget, having something to do with
            daily receipts is a Good Thing (TM).
     * Remember that savings is only as good as inflation-ROR...
     * Flesh out advanced abilities, respond to user input.
       
  My food breakdown
  
   This is an excerpt from my Gnumeric budget worksheet showing how I
   calculated a somewhat-realistic amount for monthly food expenses:
   
   Food                 Days Cost/day Total Cost
   Out/lunches          22   7        154
   Out/Dinners [nice]   2    25       50
   Out/dinners [normal] 21   6 	      126
   In/Dinners [nice]    2    25       50
   In/Dinners [normal]  5    3        15
   In/Lunches           8    5        40
   Total                60            435
   
                              Standing Questions
                                       
   Should integrate into register?
     * Future expected transactions listed? Non-editable?
     * Maybe editable...
          + Should have some may to deal with exceptional|unexpected
            conditions.
          + Example:
               o High phone bill [special call, installation charges]

References

   1. http://www.geocities.com/Heartland/Meadows/2419/page2.html
   2. "My food breakdown"