Assumptions: Assume both the sender and receiver are onboarded in to the system using user id and account number. Below the line requirement is to send money to someone not in the system using just the phone number.
Estimate the scale of the system. Consider daily active users, read/write ratio, storage requirements, bandwidth, and any relevant QPS calculations...
All our apis reside behind an api gateway. The api gateway also takes care of authentication and rate limiting. We intend to delineate the write and read paths in to separate flows. This is because although the system might not be read heavy as a regular bank account, it is reasonable to assume every 1 write could have potentially 4-5x reads and we do not want to overload everything on a single database server. This also ensures that the writes are consistent always and the reads are highly available
Initially let us get started with the assumption that all the databases are standard SQL tables - postgres would do good for the time being.