If you have a requirement to integrate with any external system, this is most likely going to influence your architecture. Let's go through some common indicators that a requirement is an ASR:
- Needing to create a software component to handle it: Examples include sending emails, pushing notifications, exchanging data with the company's SAP server, or using a specific data storage.
- Having a significant impact on the system: Core functionality often defines what your system should look like. Cross-cutting concerns, such as authorization, auditability, or having transactional behavior, are other good examples.
- Being hard to achieve: Having low latency is a great example: unless you think of it early in development, it can be a long battle to achieve it, especially if you suddenly realize you can't really afford to have garbage collections when you're on your hot path.
- Forcing trade-offs when satisfying certain architectures...