Rule 01 of 16
Keep each fact in one place
Decide where each important fact lives, and let everything else read it from there.
Without it: A customer's balance shows one figure in the app and another in the payout table. Support cannot answer, and the books cannot be trusted.
Ask your team
- For each important fact, can you name the one record that counts?
- If two records disagree, does anything warn you?
- Could a new developer find where a price or a balance is stored within an hour?
Read the full rule Request a review
Rule 02 of 16
Check everything that comes in
Treat anything from outside as possibly wrong, and check it the moment it arrives.
Without it: A payout address with one wrong character sends money to the wrong place, and there is no way to get it back.
Ask your team
- Do you check what users and other services send before you use it?
- Does the system refuse to start with bad settings?
- Is every amount and address checked before money moves?
Read the full rule Request a review
Rule 03 of 16
Decide what happens when things break
When part of a system fails, choose whether it stops or carries on, by asking what a wrong answer would cost.
Without it: A payment check times out and is treated as "paid", so someone gets access they never paid for.
Ask your team
- For each important step, do you know whether it stops or carries on when something fails?
- Does anything that touches money stop when it is unsure?
- Do people see a clear message when a part is unavailable?
Read the full rule Request a review
Rule 04 of 16
Make actions safe to repeat
Connections drop and people press twice. An action that runs twice should have the same effect as running once.
Without it: A payout times out, the system tries again, and the customer is paid twice.
Ask your team
- If the same request arrives twice, is the second one refused?
- Does a retry first check whether the first attempt already worked?
- Is the duplicate check in the database, not only in the code?
Read the full rule Request a review
Rule 05 of 16
All or nothing: no half-done changes
A change should happen completely or not at all, never halfway.
Without it: Money leaves one account, the server restarts, and the money never arrives in the other.
Ask your team
- If the server stops halfway through a payment, what is left behind?
- Can a release be undone in one step?
- Are related database changes saved together, or not at all?
Read the full rule Request a review
Rule 06 of 16
Store money in whole numbers, and make the books balance
Never store money in a way that rounds. Use whole cents, and write down the rule that must always hold.
Without it: Small rounding errors pile up until the totals no longer match the bank, and nobody can say where the difference went.
Ask your team
- Is money stored in whole units or exact decimals, never in a way that rounds?
- Is there a written rule that the totals must always meet?
- Does anything check that rule automatically?
Read the full rule Request a review
Rule 07 of 16
Give each part only the power it needs
Keep keys out of the code, and design so that one broken part cannot do much damage.
Without it: A website is hacked. Because the website holds the keys to the wallet, the money goes too.
Ask your team
- Could anyone outside your team still get in with an old key or account?
- If your web server were hacked, could it move money?
- Are passwords and keys kept out of the code?
Read the full rule Request a review
Rule 08 of 16
Prove who is asking
Every request should prove who sent it, and that it was not changed or sent again.
Without it: Someone copies a valid request and sends it again an hour later, and the system acts on it twice.
Ask your team
- Does every service check who is calling it?
- Would an old, copied request be refused?
- Do sign-in links and codes work only once?
Read the full rule Request a review
Rule 09 of 16
Several simple guards beat one clever wall
No single check is perfect, so stack simple, separate guards. When one misses, the next one catches it.
Without it: One spam filter fails, and fake sign-ups flood the system overnight.
Ask your team
- If your main check failed, what would catch the problem next?
- Are your most important rules also enforced in the database?
- Is private data removed before it leaves your system?
Read the full rule Request a review
Rule 10 of 16
Expect other services to fail
Retry what is safe, pause what keeps failing, keep a second source, and never blindly resend money.
Without it: A payment provider is slow to answer. The system decides the payment failed and sends it again. Both payments go through.
Ask your team
- When a payment times out, does the system know whether it went through?
- Does anything stop calling a service that keeps failing?
- Is there a second source for anything critical?
Read the full rule Request a review
Rule 11 of 16
On a blockchain, wait until it is final
The newest blocks can be replaced. Wait for confirmations, count each transaction once, and refuse old requests.
Without it: A deposit is credited as soon as it appears. Its block is replaced, the deposit disappears, and the customer has already withdrawn the money.
Ask your team
- How many confirmations do you wait for before you credit a deposit?
- What happens to a credit if its block is replaced?
- Can one transaction ever be counted twice?
Read the full rule Request a review
Rule 12 of 16
Let only one worker move the money
When several copies of a program run at once, decide which jobs may run in one place only.
Without it: Two copies of the payment checker see the same deposit, and both credit it.
Ask your team
- If you started a second server, would any job run twice?
- Could two staff approve the same payout at the same moment?
- Which part breaks first if your number of users doubles?
Read the full rule Request a review
Rule 13 of 16
Keep AI on a budget and on the facts
Treat AI like any paid service that is sometimes wrong: cap the cost, give it checked facts, check its answers, and keep a person in charge.
Without it: An AI assistant invents a price that is not on your site, and a customer holds you to it.
Ask your team
- Is there a spending cap on your AI use?
- Does your AI work only from sources you have approved?
- Does a person approve anything that moves money or goes public?
Read the full rule Request a review
Rule 14 of 16
Let tests decide when work is done
Agree what "correct" means as tests before you build, and for money, test the rule itself.
Without it: A change passes a quick look, goes live, and quietly breaks the refund flow.
Ask your team
- Do tests decide when a piece of work is done?
- Is your most important money rule tested directly?
- Do tests run automatically before every release?
Read the full rule Request a review
Rule 15 of 16
Ship only what was checked, and watch it run
Release exactly what was reviewed, check it after every release, keep a way back, and hear about problems before your users do.
Without it: A fix made directly on the server is overwritten by the next release, and the old bug comes back.
Ask your team
- Can you release a small change and undo it the same day?
- Is what is live exactly what was reviewed?
- Would you hear about an outage before a customer tells you?
Read the full rule Request a review
Rule 16 of 16
Fix the cause, not just the symptom
Every system has bad days. What counts is a calm account of what happened, and a rule that stops it happening again.
Without it: A bug is patched in a hurry, nobody asks why it happened, and a cousin of the same bug comes back a month later.
Ask your team
- Do you write down what happened after each incident?
- Does each fix include a guard against that kind of failure?
- Do the same problems keep coming back?
Read the full rule Request a review