A Software Architect's View of the Design of Double Entry Accounting (2012)
ledgersmbdev.blogspot.com
ledgersmbdev.blogspot.com
You write software tests for the same reason you do double entry: error detection of a technical system that has expected results. The only difference is that accounting has "real" numbers whereas software is algorithm definitions, so you have to plug in real values to run the tests.
It's also telling how similar (and unforgiving) both software and accounting can be. The mischaracterization of a column in accounting could be the difference between profitability and insolvency for your company. The mislabeling of a macro in your program could be the difference between correct execution and a segfault.
This is a misconception and if you think about it, it doesn’t make a lot of sense since the two records are generally generated by a system that gets a single value from the user, so it would be a software error if they did not even out.
Accounting errors are normally human errors, e.g. entering the wrong amount or specifying the wrong account, none of which are errors that double entry accounting will catch.
However, double entry accounting gives us an audit trail because it tracks how assets are moved between accounts, so if the balance of an account is not as we expect, we can go back and see exactly why it is what it is.
That applies to a software system, but not a handwritten ledger. In the latter, it does serve as an error detection mechanism because a human has to enter both values and other humans have to read them clearly.
You are correct, though, that the primary reason for double-entry is audit trail.
Ah, makes sense. My understanding of double-entry comes from history rather finance. I read a few articles on Italian history, specifically the Medici family with Florentine banks and hand-written ledgers. I'm not an accountant, in practice it makes more sense as an audit trail.
I guess you could stretch the metaphor further and say that a SCM + testing gives you the equivalent of double-entry. However in practice, I've never had much trouble convincing anyone to use a SCM :).
[1] http://martin.kleppmann.com/2011/03/07/accounting-for-comput...
All transactions were recorded as individual entries and every single one of them had to match for it to be processed.
So for a specific point in time, it was easy to simply re-run the transactions from last start to that point.
Some years ago I would have really appreciated the help of someone with your knowledge.
Right now I'm focusing on a videogame.
Double-entry bookkeeping is just this obvious fact, taken to a conclusion: every transactions of money is balanced; an equal amount of money is credited and debited in each transaction.
Capital = Assets - Liabilities
Then later I go on to explain that you can rearrange that equation: Assets = Capital + Liabilities
One way to think of that is that the sum total of everything the business has (Assets) has a claim on it from either creditors (Liabilities) or owners (Capital).So, it's really true that the company owns nothing for itself.
A lot of people have difficulty getting their heads around double-entry and, therefore, accounting in general. Different explanations seem to work for different people.
For anyone looking for an intro to accounting, I highly recommend Frank Wood's "Business Accounting 1".
(The correct way to design an accounting system is that, if a record is changed, you do an INSERT rather than updating the old record in place. Then there's always an audit trail.)
Honestly? I am more likely to conclude that the author is not yet very mature as a programmer.
Most systems I've ever worked with (I end up working on existing systems much more than implementing from scratch) are brittle somewhere in the sense of being potentially incompatible with some random enhancement X sans major rewrites. And when major rewrites aren't possible we resort to complexity.
As developers we're all aware of this and often refer to it as managing technical debt, no?