How we test
A compliance wallet shipped with 590 test files and 90%+ unit coverage before it took real money. We write tests around the rule, not around the happy path: a CI check fails the build if a new money-movement command is added without an identity gate, so a compliance rule can't quietly rot as the codebase grows.
How we review code
Every change touching money movement or identity gets a second senior engineer's review before merge, with the reviewer checking against the constraint the code is supposed to enforce — not just style. On a payments platform, that means checking that a new processor adapter can't bypass the transactional outbox.
How we deploy
Infrastructure is defined as code from day one, so a new region or environment is a parameter, not a manual migration. Deploys go out behind health checks, and a bad deploy rolls back automatically rather than waiting for someone to notice.
How we monitor
Money-movement systems get alerting on reconciliation drift, not just uptime — a system that's "up" but double-charging is a worse outage than one that's down. Read paths are served from projections, so reporting load never competes with the alerts that matter.
How we handle incidents
When a payments API came under a DDoS attack, mitigation happened at the edge within the week, without merchant-facing downtime, because the architecture already isolated the public API from the internal ledger. We write the incident up afterward — what changed, in what order, and what we'd do differently — and that write-up becomes part of the handbook.
How we hand over
Documentation ships with the code, not after it: architecture decisions, runbooks and the reasoning behind constraints like "every processor sits behind one adapter interface." When an engagement ends, you keep the repository, the infrastructure as code, and the decisions written down — or we keep running it.