Above described assumptions which architects and designers of distributed systems are likely to make and which prove to be wrong in the long run:
- The network is reliable. The network is unreliable and we need to address possible failure scenarios.
- Latency is zero. Try to make few as possible network calls since latency is not zero and huge comparing to in-memory calls.
- Bandwidth is infinite. Try to simulate real production environment.
- The network is secure. You need to build security into your solution from Day 1. You need to be aware about security concerns and its implications even so the architect of the system should not be a security expert.
- Topology doesn't change. In real environment topology can change. And you need to be aware regards it (e.g. use “Next Hop” routing or specify address by DNS name).
- There is one administrator. Administrators can constraint your options and you need to help them to manage your application.
- Transport cost is zero. There are costs associated with both computational resources and money spent on network maintenance.
- The network is homogeneous. Interoperability will be needed sooner or later. Do not rely on proprietary protocols but use standard technologies that are widely accepted.