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.