Advanced Scripting in Personal Banking

/Code / Big Ideas

Abstract

Banking is archaic. The digital tools available to us to manage our money are simply online forms of the traditional paper methods available before the personal computer. Except they aren’t even as useful as some cash methods.

I propose a banking system which allows for users to create rules and scripts which are executed for each transaction. This framework would allow for a bank’s customers to manage their money in ways which work best for them. This system would also allow for users to share their methodology (whether it be in budgeting, debt reduction, savings, or anything else) without having to teach the process of that methodology; they could simply share a file or text snippet which could be uploaded to their friends’ accounts and implement the system automatically.

The Problem

My wife and I are preparing to welcome our third child into the world. Which means we will need a new car. Actually, a minivan. We just can’t squeeze a third carseat into the back of our car.

We are also in the process of eliminating our debt using the Dave Ramsey snowball method.

And we are preparing to move across the country so I can go back to school and get my MBA.

In short: we have a lot of financial goals in the short term. It can be a lot to manage manually. Every paycheck I get I have to withdraw 10% for tithing (I return God the 10% He asked for first), then transfer 20% to our account at Simple. Once the money gets to Simple I divvy it up into our different savings goals using their spiffy Goals feature. (Honestly, Simple is an awesome online-only bank which I strongly recommend. I don’t use it as my primary bank because they don’t offer join accounts yet. As soon as they do, my wife and I will make the switch.)

After transferring our savings, I have to consult our spreadsheet for the debt snowball and make sure all the payments are made in the right amounts on our various debts. I then update the spreadsheet to ensure we have up-to-date information.

We then watch our transactions manually to ensure we are sticking to our budgets and living within our means.

My current personal financial system is a mess that requires logging into too many systems and transcribing too much information. It’s arduous, tedious, obnoxious, and vulnerable to transcription errors which could end up costing me time and/or money.

The Proposition

Logic. It’s as simple as that. We have had logic gates in computing devices since they were invented. They are the foundation upon which all computing is done. If this, then that. In fact, there’s an entire company dedicated to that idea.

Imagine if a user could pull up their account and set up a simple series of “if this, then that” rules?

(All syntax discussion I do here is simply so the examples make sense. I am NOT proposing a particular syntax solution. In fact, I would love if this hypothetical banking platform had SDKs for many different programming languages to allow greater accessibility.)

IF deposit[type] IS payroll  
    THEN TRANSFER checking[balance] - deposit[net] TO savings['General']  
    AND SEND CHECK IN AMOUNT deposit[gross] * 10% TO contact['Church']  
    AND TRANSFER deposit[net] * 10% TO savings['New Car']  
    AND TRANSFER deposit[net] * 10% TO savings['Moving']  
    AND TRANSFER deposit[net] * 40% TO checking['Bills']  
    AND TRANSFER checking[balance] * 50% TO checking['Groceries']  
    AND TRANSFER checking[balance] TO checking['Rent']  

A line-by-line breakdown of what we just did:

IF the deposit is payroll
    THEN transfer whatever was in the account before payroll came in to my General savings envelope
    AND send a check of 10% of my gross earnings to the Church for tithing
    AND send 10% of the net to my New Car envelope
    AND send 10% of the net to my Moving envelope
    AND send 40% of the net to my Bills envelope
    AND with whatever is left, send half to my Groceries envelope
    AND the other half to my Rent envelope

Now every paycheck gets the essentials quickly transferred to where they belong. In my proposal, the user would have one savings account, and one checking account, but with multiple “envelopes” in each. You can tuck money either into your general savings or checking, or into any of these envelopes at your discretion. So, savings['New Car'] drops that money into my savings account, but won’t let me touch it unless I authorize that I am going to use that money to buy a car.

The bank could print and mail checks to my contacts which I can call by name using a similar syntax contact['church']. Obviously these contacts would have to be set up by the user in their account. Alternatively they could pass information just in quotes

SEND CHECK IN AMOUNT 125.85 TO 'John Doe, 123 Sweet Street, Awesometown, CA, 95555'

When accessing the checking and savings objects the [balance] property always reflects the transfers, checks, and other transaction performed on the preceding lines. Hence the last line transfers the balance of checking to the Rent envelope in the checking account.

The system could also handle rules for debt management:

SORT bills BY rate ASC
snowball = BALANCE(savings['Bills']) - SUM(bills[minimum])
PAY bills[0] AMOUNT bills[0][minimum] + snowball
FOREACH(UNPAID bills AS bill):
    PAY bill[minimum]
END

The object bills is a reserved object which represents all bills which you receive through the bank’s bill pay service (or whatever your bank calls it). The hypothetical syntax show here automatically knows that when doing a FOREACH loop, the individual objects contained within bills will be bill. Also, when accessing properties of bills, such as [minimum] you will be returned all the minimum payments from all the bills.

Or how about non-traditional savings rules?

IF expense[type] IS 'entertainment'
    THEN TRANSFER expense[amount] TO savings['College Fund']

Every time you go out to the movies, you’re also committing to save money to send your kids to college.

Or you could be philanthropic:

IF expense[type] IS 'fuel'
    THEN SEND CHECK IN AMOUNT expense[amount] TO contact['charity: water']

Obviously you wouldn’t want to be sending so many small-value checks to a charity you support; that’s a lot of unnecessary overhead for them to process. You could just transfer the money to a savings envelope and then every month, or 6 months, or year you could have the check printed and mailed.

These are just some quick examples that I could think of in the short amount of time I sat at my computer and wrote this blog post. There are a ton of other things that would be cool to do:

  • Notifications on your smartphone or smartwatch with custom rules and messages.
  • Automatically buying and selling stocks (within legal terms) based on rules you create.
  • Rewarding good behavior (like completing a run with Runkeeper) by transferring money from your ‘Fun’ savings envelope to a ‘Discretionary’ checking envelope
  • Automatically sending birthday money to neices and nephews.
  • Automagically consolidating your debt onto a credit card with lower interest rates, and then paying it down by combining all of the previous minimum payments into an advanced snowball.
  • You could have a “Goals” account that when you deposit money into it, it is automatically applied to the most urgent goal automatically. That way you set up your scripts to deposit whatever is left at the end of the month toward your goals and it gets divvied up by highest priority.

Basically, the point is that I want my bank to be as smart as I am. If I can think of a way to manage my money on a recurring basis, I should be able to teach my bank how to do that for me.

So what did I miss? What would you do with a banking SDK?

Share on: /facebook /twitter /google+

comments powered by Disqus