An introduction to double-entry bookkeeping
As a stakeholder in an organization, we want to answer two questions:
- What does our entity own and owe at this moment? The answer describes the entity’s position. We measure this by looking at the entity’s assets, liabilities, and equity.
- Over this period, how did the entity perform? The answer describes the entity’s performance over an interval. We measure this by looking at how value has flowed.
Bookkeeping is the art of measuring position and performance.
Books
Historically, entities would have a bound journal where clerks recorded transactions as they happened, then periodically posted those entries to a ledger organized by account.
When bookkeepers say “books” today, they mean the authoritative record of transactions. When they say “the books”, they mean the entity’s official accounting records. From the books, you can derive the entity’s “book value”, which together with broader economic indicators, can help you determine the entity’s intrinsic value, or fundamental value.
Single- and double-entry bookkeeping
If you were to design a system to measure position and performance, you might start with one book that contains a list of transactions:
-4000 for Materials on 1/1
+10000 for Table on 6/1
This is single-entry bookkeeping. It was the most common form of bookkeeping up until the 1300s.
It is flawed for any entity operating at a real scale:
- If you write a transaction incorrectly or forget to record one, you have no way of recovering from this error without auditing every single line.
- It tracks what you did but not what you have, so it’s hard to have clarity on your performance and position
Double-entry bookkeeping solves these problems by modeling transaction, not as an action, but as an exchange where money moves from a source to a destination,
Every transaction must have equal debits and credits, so the sum of all debits must always equal the sum of all credits. If they don't, you know mathematically that an error occurred, and you can isolate exactly where the system broke.
Cash and accrual basis
Once you have a system to record transactions, you need to know when to record them.
You could record revenue when cash arrives and expenses when cash leaves. This is called cash basis.
The problem is that cash movement does not necessarily match economic reality.
if you buy 350k GPUs for $10B in January (as one does) and they generate revenue for 3 years, the first month’s performance will look catastrophic. The next 35 months will look artificially profitable.
Accrual basis solves this problem. You record revenue when you earn it and expenses when you incur them.
You try to match expenses to the revenue they help generate in the same period. This is the matching principle.
Accrual basis requires judgment to determine:
- When is revenue recognized?
- When you buy something, is it an expense or an asset that you capitalize and spread over many years? If you transform operational expenses into capital expenditures, you can artificially inflate profits.
- You booked the revenue, but customers might not pay. If you underestimate the allowance for doubtful accounts account, you can overstate past revenue.
- What are your assets actually worth as time goes on?
- …
These are the hard parts of accounting.
This is where fraud and creativity creeps in. Modern accounting allows you to measure economic reality but it can be gamed. Accounting standards such as the IFRS or Generally Accepted Accounting Principles (GAAP) try to prevent this.
Journal, ledger, and accounts
In double-entry accounting, transactions flow through two books: the journal and the ledger.
The journal is the book of original entry. When an event occurs, you record it in the journal first. In a journal entry, the sub of debits must equal the sum of credits, so every entry has at least two lines, hence the name double-entry.
The general ledger is the book of final entry. It contains categories that group transactions together, called accounts. Posting is the process of transferring journal entries to the appropriate accounts in the ledger.
The journal answers the question “what happened, in order?” The ledger answers “what‘s the status of each account?”
Subsidiary ledgers
Some accounts need more detail than a single balance can provide. An Accounts Receivable account might have a balance of $50,000, but you need to know how much each customer owes.
A subsidiary ledger breaks down an account along a dimension, such as customer, item, project. The main account in the general ledger is called the control account. The sum of all subsidiary ledger balances must equal the control account balance. Verifying this is called reconciliation.
Measuring position
Accounts tracking position are permanent and track:
- Assets: they represent future economic benefit
- Liabilities: they represent future economic sacrifice
- Equity: what’s left of assets after satisfying liabilities
Together, they form the accounting equation:
Measuring performance
Accounts tracking performance are regularly reset and track:
- Operations (earning revenue and incurring expenses)
- Transactions with owners (contributions and withdrawals)
The equation for equity change is:
Without a reset, the Revenue account, for example, would accumulate indefinitely, which is meaningless for measuring periodic performance. You’ll see later how these accounts are folded back into permanent accounts.
Accounts have a balance
Every account has two columns, a left column (debit) and a right column (credit).
In bookkeeping, Debit (Dr.) simply means Left, and Credit (Cr.) simply means Right. Neither is inherently "good" or "bad."
The account’s balance is the difference between the sum of the two columns.
The balance is calculated differently depending on the type of accounts:
- Debit balances: , entries in the debit column increase the balance, entries in the credit column decrease the balance
- Credit balances: , entries in the debit column decrease the balance, entries in the credit column increase the balance
Accounts on the left side of the equation above (Assets, Expenses) have debit balances. Liability, Equity, and Revenue accounts, on the right side, have credit balances.
Accounting for timing
It is sometimes undesirable to post directly:
- If the debit and credit sides of an economic event are known at different times, you can’t post directly.
- If different systems generate each side, you need a place for them to meet, so you can’t post directly
To solve this, you route through a clearing account. Eventually, the clearing account should net to zero once all the entries are posted, if not, you have a problem.
For example, suppose you write 10 checks on Monday, by Friday eight have cleared. You can look at the clearing account and see your outstanding checks. If you had posted directly to Cash, you’d have no systematic way to identify which checks are outstanding.
Another example, your payroll system debits $10k from the Salary Expense account and credits $10k to the Payroll Clearing account. Then your treasury system debits $10k from the Payroll Clearing account, credits $2k to the Tax Withholding Payable account and credits $8k to the Cash account.
Closing accounts.
Eventually, the temporary accounts must be reset and folded into the permanent accounts. This happens at least annually for most entities, for tax purposes.
Most organizations perform monthly closes because waiting a full year to understand financial performance is dumb.
Closes produce two important statements:
- The statement of financial position measures the entity’s stock as of a date, answering the stakeholder’s position question. It is also called a balance sheet.
- The cash flow statement explains why did cash change. It is usually broken down into operating, investing, and financing activities.
- The income statement reports the balances of all temporary accounts over a period, answering the stakeholder’s performance question. In one number, it is . The net income represents a change in equity from operations. It is also called a P&L (Profit & Loss statement) or an earnings statement.
Accounting for new information
After preparing the financial statements for a period, you might discover an error or receive a late invoice.
You can either:
- Go back and correct the prior period
- Record the correction in the new period
How you handle this depends on the state of your close:
- Hard close. You wait for all invoices to invoice, reconcile every bank accounts, and then you lock the period. If a late invoice arrives after a hard close, you must record it in the current period. You trade accuracy for speed.
- Soft close. You don’t wait for every invoice but make estimates for what you think you owe and accept a margin of report to get the report faster. You trade speed for accuracy.
If you make an error large enough to mislead investors, regardless of the state of your close, you need to unlock the prior period and issue a restatement. This is bad.
Chart of Accounts
For visibility and compliance, bookkeepers don’t stop at 5 categories, they break down flows of value in subcategories and sub-subcategories The architecture of accounts is called the Chart of Accounts (COA).

The COA is like a forest. The account’s category is the trunk of a tree in the forest, its subcategories are branches, etc.
Accounts are assigned codes, typically following a hierarchical scheme. For example:
- 1XXX: Assets
- 2XXX: Liabilities
- 3XXX: Equities
- 4XXX: Revenue
- 5XXX: Cost of Goods Sold
- 6XXX-8XXX: Operating Expenses
- 9XXX: Other Income/Expenses
Within each category, subcategories follow a logical ordering. For assets, you might see:
- 1000-1099: Current assets, such as cash.
- 1100-1199: Non-current assets, such as property.
The architecture of a COA will change depending on the size of the business and its industry.