Archive for January, 2010

Open Source Accounting Software

Wednesday, January 13th, 2010 by hartmans

I’m developing a huge backlog of things to write about, going back as far as a couple of posts inspired by the Kerberos conference in October. However, those require more effort putting together the post, so I’m going to focus on something more recent.

Part of running a business—even a small business like Painless Security—is dealing with the administrative and bookkeeping. The normal solution seems to be Intuit’s Quick Books. When I set up the company, I looked into that. However, Intuit’s accessibility story starts with “give up,” and goes down hill from there. Apparently, screen reader vendors have offered to work with Intuit to help them, but have been turned down, or at least that’s the strong implication I get from reading blogs from these accessibility vendors. So, I’d definitely rather not give Intuit my money. I’m also looking for a bit more than the minimum in accounting software. Keeping the books in order enough to pay taxes would be easy. However I want to be able to understand where I’m making money; I want to be able to figure out if the fixed price contracts I enter into end up being good ideas. I want to understand how expensive community projects Painless Security gets involved in like Debian and IETF work are both in terms of direct costs and opportunity costs. I want to understand what sorts of work ends up being the most profitable. All of these are fairly typical management questions; solutions to varying degrees are understood. however it means I’m actually going to use an accounting product more than just to track my invoices and prepare taxes.

I decided to see what the open source world was like in this space. I started with Ledger SMB. Ledger SMB’s main claim to fame is that it tries to be better than SQL Ledger. Being better than SQl Ledger is definitely a good thing. It “worked” well enough to generate invoices and income statements. It nominally had facilities to track the sort of per-project information I’m looking for, but the facilities are not near good enough. Also, there were some issues—things like the fact that total debits didn’t particularly need or tend to sum to total credits got old after a very short while. Also, facilities for correcting mistakes were unfortunate. You could either operate in a mode where you could delete a transaction, or a mode where you reverse transactions. Deleting transactions in practice meant deleting most of a transaction; balances became out of sync and half of the transaction tended to stick around using some interfaces but not other interfaces. Database cleanup was almost always required. In principle, reversals are better. However, there is no facility to indicate that you’re not expecting payment on a reversed invoice. The receivables/payables account balance out because of the reversing transaction, but both the reversing and reversed transaction end up becoming over-due. “Hey, can you please send me some anti-money to clean this up?” The code was dreadful; the goal was to have better abstraction than SQL Ledger. Perhaps that was achieved, but man that leaves a lot to desire.

Now, I’m playing with Open ERP. It wants to grow up some day to be a competitor to SAP R3. In a way that sounds good, although it does mean there’s a high complexity cost. There’s a lot of functionality. There’s reasonably good separation between view and model (and possibly even controller). The code is often clean, although the random blocks of commented out code with no explanation cause me to cringe. Many aspects of the system seem incredibly well designed; you can approach the system through a web client, graphical client, two different RPC mechanisms, XL and Open Office plugins.

However, there’s this mix of missing stuff and completely broken that causes me to wonder whether I’m going to be sad. First, there appears to be basically no support for the US. All addresses are European format and are hard coded. Each individual report needs to be changed. Recently, I found cases where as best I can tell debits and credits are just reversed. I’ve found a case where backing up the database succeeds but generates a zero length file. I almost lost data through that last one. There’s a complex set of mechanisms to deal with units-of-measure for products—for example, some jobs billed in hours, some are billed in days. However other parts of the code just add quantities.

Playing around with this I am reminded again that I really enjoy thinking about these sorts of problems. An interesting ERP project could be fun to work on. for example, I bet handling ERP needs for some cloud-centered company would be a lot of fun.

Also, as part of looking at Open ERP, I’ve more or less developed the necessary scripts to migrate a simple service company from Ledger SMB to Open ERP. There are limitations of course, but if this would be useful to you, drop me a line.