The journey
Payment Rails in Motion began with an onboarding problem: how do you make sense of the US financial ecosystem? When a customer hits “Send,” a single confirmation screen compresses banks, networks, ledger entries, settlement windows, and exceptions into one moment, even though each rail creates different obligations for the product and its operators. That machinery is opaque to product managers learning the domain, and I wanted a simpler way to make it legible.
I started by modeling the participants as separate components: a payment gateway, bank ledger, receiving bank, and simulated Federal Reserve. I then made the movement of state among them visible. That exposed decisions a static diagram could easily hide: which institution owns the authoritative state, when funds become available, which instructions can be retried, and which ledger writes must remain immutable and idempotent.
Adding ACH, Fedwire, and debit required the system to behave according to each rail. Wire finality changes how errors must be handled. ACH returns extend the lifecycle beyond the original posting. Debit separates authorization from clearing and settlement. Failure paths, compensating entries, and audit history became part of the product experience rather than background implementation detail.
The prototype is a controlled simulation, not a production payment processor. Its value is making infrastructure concrete enough for a team to inspect the assumptions, product obligations, and operational consequences before those decisions harden.