Questions I typically ask myself when designing a system:
These are rather generic, off the top of my head.
- Isolation/decomposition - what are the separable concerns?
- Encapsulation - how to optimally package those concerns?
- Intermediation & integration - how to compose and orchestrate over multiple components? Synchronous/blocking? Asynchronous/even-driven? Asynchronous/batch-driven?
- Consistency/Availability/Partition-tolerance trade-offs? Eventual consistency? Does 'OK' mean 'fully committed transaction' or 'i've recorded enough information to achieve globally consistent commit at some point in the future'?
- Business logic - programmatic, data-driven & rules-based?
- Entity models - extensibility/flexibility vs. performance optimization?
These are rather generic, off the top of my head.