Brought to you by

Journaling into control accounts

Posted 9 years ago in Xero news by Rod Drury
Posted by Rod Drury

I was asked last week why we didn’t allow journals into the debtors control account. I replied, “why would you have to?”. It turns out the accountant hadn’t gone through the Xero setup wizard to enter in outstanding invoices. But the question has been bugging me for the last few days and I feel a need to explain why it’s not good to journal into control accounts and that it’s really bad if your accounting system would allow you to do that.

But let me step back a bit to paint the picture.I started accounting at Napier Boys High School with Fred Westrupp. I’m pretty sure we did accounting from 5th to 7th form. From what I can remember Fred was your classic accountant. He looked like an accountant. And like most accountants I know, once you get to know them, they have a very dry sense of humour. Fred was passionate about accounting and or some reason I was drawn to it as well. I liked that it was logical, symmetrical and that you put things into the right place and the numbers all worked out. Call me a geek but double entry accounting has always appealed to me.

I think it’s also why I like computer programming. Bob McCaw at Napier Boys got us into computing in the Apple II BASIC Programming days. It’s logical and when you get it right it works.

I did both accounting at computing at Victoria but I’m sure that I actually learned more at high school. Certainly I learned bookkeeping which didn’t seem to be taught at university.

When we started Xero I had to convince our first few people (like Craig, Kirk and Phil) that accounting was interesting and for the first few weeks we were drawing T accounts to handle the full life cycle of business transactions. I was determined that we were going to build a state of the art accounting engine that leveraged the power of a relational database. Kirk completely got it and not only built the double entry accounting engine but solved the problem of modeling cash and accrual transactions in a single engine. We’re really proud of that.

Once we had completed the R&D phase of Xero and selected our platform and approach we quite quickly built the core engine. That engine allowed debits and credits to be posted, and they had to balance. The engine would not allow things to get out of sync.
Essentially that is all you need to do accounting and was one of the reasons why we launched Xero with fairly limited functionality because the journaling system would allow us to post anything to deal with any transaction.

Over the years I’ve worked with lots of accounting systems and because of my systems background I’ve generally been appalled at their underlying file or database structure. Some systems allow one legged journals and all sorts of things that just allow errors to creep in. We didn’t want any of that.

Once you start building functionality on top of the accounting engine you’re essentially just making it easier for the user to create those base journals. Once you have all the features that people need they should never have to do a journal. We’re not there yet but have made a huge amount of progress. We love asking what accountants are using journals for because that is an indicator of functionality we’re missing and normally an opportunity to improve business processes.

Once you start building accounting modules over the core engine, like Debtors, you create subsidiary ledgers. That means that the account becomes a control or header account over a large number of transactions. Summary accounting reports like Profit & Loss and the Balance Sheet present a summary over the entire Debtors Ledger.

The functionality of the accounting application needs to handle all the things you do with debtors. Invoicing, receipting, credit notes etc to keep everything in sync. If you allow direct posting into the debtors control then you can get out of sync and can create a mess. In our view you should never be able to post to control accounts.

So being asked whether we could do it just reinforces to me how bad previous accounting engines actually are they would need to allow that. We’ve even seen some of the most popular products adjust the database schema on a period role. That is appalling. In a relational database do you need periods at all?

Another good example is hierarchical charts of accounts. We often see companies with charts of several hundred accounts with the same groups repeating. There are so many accounts it’s impossible to get meaningful management information out of reports. That is why we implemented our version of cost centers called Tracking, which leverages the relational database to report across multiple dimensions.

So we’ve done a lot of work to make Xero the worlds easiest accounting system. We’ve also done a lot of work under the hood to build what we believe is the most elegant accounting engine ever.

I hope Fred would be proud.


Ben Kepes
December 1, 2008 at 2.46 pm

For those of you not exposed thus far to the hilarity that is accountants humour, check out

You’ll come away either wildly amused (assuming you’re a pocket protector using accountant type) or wondering what accountants do after work for fun (answer – fold and sort their business shirts based on chronological purchase date)

Yup – a charismatic bunch 😉

John Younger
December 3, 2008 at 5.18 am

I have a lot of experience with this and I could not agree more.

Although I am a developer, and have been designing, building and implementing systems for many years now, I come from an accounting background myself and I have seen this many times.

Programmers who understand accounting are very rare. I am constantly appalled at the lack of integrity in accounting systems, particularly in the interfaces from other systems into accounting. I can tell instantly when those interfaces have been designed and written by developers who don’t understand accounting.

You should NEVER journal into a Control account.
This is not limited to Debtors : it applies to Creditors, Bank, VAT or GST, Inventory Control, and so on.

A control account should accurately balance to the transactions in the sub ledger that it represents, and posting manual journals into the GL Control Account breaks that reconciliation, by definition.

It just shouldn’t be done.
Any need you have to change the balance in the Control Account should be met by posting the appropriate transaction(s) in the relevant sub-ledger, which would then flow on into the Control account in the GL.
Expressed differently – if the Control account balance in the GL is incorrect, by definition this means that one or more transactions in the sub-ledger are incorrect. Find them, fix them, and the Control account will take care of itself.

Last year I had to reconcile an income control account that was a complete mess. This account had interfaces into it representing more than 2 million transactions from the membership system, and the contra entries numbered about 150,000 from the bank account(s). To put it into perspective, more than 150,000,000 pounds had gone through this account ( yes, that was one hundred and fifty million pounds ) and it had NEVER BEEN RECONCILED. God knows what the auditors had been doing….

It took me three months to reconcile it.
I then spent another month going through all of the relevant processes that had caused it to be in such a mess, fixing them, changing procedures, and programmatically introducing checks and controls to stop it recurring.
The staff can no longer make manual entries into the Income control account, and it’s balanced, perfectly, ever since.
Just not possible if we were to allow manual postings into the Control account.

Keep up the good work.

December 7, 2015 at 12.15 pm

Given that Xero’s official solution is to create another A/R account, I’m not surprised. This is a truly horrible solution:

Leave a reply

Your email address will not be published. Required fields are marked *