Finance developers know the hell that is money and precision. I've worked fintech for years and god, so many gotchas.
I got a tech screen for a company that was brilliant. The question was "take these transactions (from a file) and add them to a database.
To any decent engineer they would see that and say "sure thing! Easy let's do it!"
To me, a senior fintech engineer though I was like "oh dear God, let's see if we can even get a quarter of this done"
(For those who have not gone through the trial by fire that is handling money in professional code, you've been warned, I'll leave just the few off the top of my head in spoilers below.)
gotchas from that problem
- What currency are the transactions in?
- are all of the transactions in the same currency?
- will I need to support currencies with other precision's? (3, 4, 0 decimal places? More?)
- do we accept transactions that are not precise to their currency? (If they say $4 is that valid? Or is that an error because they should have sent $4.00)
- what currencies do we accept? Can we accept every currency, or do we have a list of acceptable currencies?
- if we accept multiple currencies do we accept the money into an account or do we need to exchange it?
- how do I validate that the transaction accounts are valid?
- what if one transaction is invalid? Do we still accept the rest of the file? Should we reject the entire file in case their system is wrong?
- which parser are we using? Is it precise? (Most parsers parse through float or double to get into the language, and are not precise)
Money is not easy friends