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"