...
I've picked out a few that could be relevant to how we got to the current design
- Business logic must use the most current state for decisions
- Business logic and storage are split in two separate modules (in order to support independent substitution)
- All integration between modules is done via HTTP APIs (proxied via Okapi)
- All data is stored within PostgreSQL
- A record oriented design with a single system of record for each record type (business logic / storage separation not-withstanding)
...