Designing for money.
WHAT DISTINGUISHES IT
Correctness matters absolutely State must be auditable Failures must not lose or duplicate money External systems are unreliable and slow
WHAT TO BUILD AROUND
An immutable ledger as the source of truth.
WHY
Every balance, statement and report derives from it consistently.
WHAT TO SEPARATE
The ledger from business logic Payment provider integration from everything else Read models from the write path
WHY PROVIDER SEPARATION MATTERS
Providers change, and provider-specific logic spread through a system prevents that.
WHAT TO MAKE ASYNCHRONOUS
Anything depending on an external system.
WHY
External calls fail and hang, and a synchronous chain fails entirely.
WHAT THAT REQUIRES
Explicit state for in-flight operations Background resolution Visibility of what is pending
WHAT TO AVOID
Distributed transactions across services Business logic in database triggers Balances computed in several places
WHAT TO ENFORCE
Every money movement through one path.
WHY
Several paths diverge, and reconciliation cannot then be trusted.
WHAT TO LOG
Every state change, with cause and actor.