I planned for two weeks. It took eight.
In March I set out to make Cloudby properly support the multicurrency. Not the surface kind, where you type a foreign amount and hope the rest sorts itself out, but the real thing, where the foundational core understands more than one currency and keeps your books compliant across all of them.
I thought I understood the problem going in.
It turned out I did not.
Two weeks just to understand it
The first surprise was how long it took simply to understand multicurrency from every angle. Before a single line felt safe to code, I spent two full weeks mapping out how currency touches everything: how a rate moves between the day you raise an invoice and the day you get paid, how gains and losses were unrealised until it is transacted, how it all has to reconcile at the end. Two weeks of reading and thinking, and then I assumed two more weeks of building.
Rebuilding the foundations
The truth is that the original foundations, the journal and the transaction tables at the heart of the system, were not capable to fully support the shear weight of real fully compliant multi-currency. So this was not a feature bolted on. It was the engine itself, re-laid to support multicurrency from the ground up.
Along the way I fixed a number of loose ends that had been quietly under-developed, the kind you only notice when you push them hard. (suchas 12 supporting decimal pace to support crypto currency, dealing with floating points, locale), Rebuilt of Reconciliation. Closing your accounts when more than one currency is in play. The unglamorous parts that have to be right, because everything else stands on them.
The hardest part: one consistent way
The real challenge was never any single feature. It was finding one consistent way to handle currency everywhere, so that every corner of the system speaks the same language. Get that wrong and you spend forever patching special cases. Get it right and the whole thing holds together. Most of the eight weeks went into earning that consistency.
Multicurrency means multirate
More currencies bring more exchange rates, and rates are fiddly to work with. So we built our own control to make them painless: pick a currency, type the rate, or pull the latest spot rate with a click. Small thing on the surface, a lot of care underneath.
Not every account treats a rate the same way
Here is the part I underestimated most. Knowing today’s rate is the easy bit. The hard bit is that different accounts are meant to behave differently when rates move, and they must never be mixed up.
A customer deposit, once taken, stays at the rate it came in at. It is historical, frozen, and should never be revalued. An invoice is different. It is recorded at its original rate, but the value you are still owed properly shifts as the rate moves, so it has to be revalued for reporting. And a liquid account like a bank balance is the most restless of all, effectively revalued to today’s rate every time you look.
Then comes the twist that ties it together. When you run a financial close, you revalue the accounts that should move, so the report shows your true position on that date. But you do not want that to permanently rewrite your historical and original entries. So the revaluation is posted, used for the report, and then reversed, leaving the underlying records untouched. Unrealised today, realised only when the money actually moves.
- Historical – frozen at the original rate, never revalued (a customer deposit).
- Origin – revalued for reporting, then reversed (an invoice).
- Spot – always at today’s rate (a bank balance).
The sting for a real person is subtle. It means setting up your chart of accounts is no longer just naming accounts. Each one needs the right currency behaviour, historical, revalued, or current, and getting it wrong is quietly painful months later. A surprising share of the eight weeks went into making those choices clear and hard to get wrong, so you do not need a long education to set it up correctly.
Currency is stranger than it looks
I assumed a number was a number. It is not!
The rabbit hole I did not expect was how differently the world writes a number.
Take India, where large numbers are not grouped in threes all the way along. After the first three digits it switches to groups of two, so a number reads like 12,34,567 rather than 1,234,567. Then there are places that use a dot to group digits and a comma for the decimal, the exact opposite of what many of us are used to. And in Chinese, formal documents traditionally group digits in tens of thousands, in fours, even though the everyday standard groups them in threes.

None of this is optional. If the numbers do not read the way a person expects, they will not trust them, and trust is the whole point of an accounting system.
Why this matters to you
The result of those eight weeks is quiet, which is how foundational work tends to be. You can now run your business across more than one currency with confidence, enter rates without fuss, and see amounts presented the way they should be.
I underestimated this one badly. But I would rather take eight weeks and build the foundation properly than ship something that quietly gets your money wrong. That is the kind of work we are happy to sweat over.