Component-Based Design
In software languages:
- Assume we are all on the same “team”
- Optimize for efficiency, follow-up with debugging to fix problems (fragile interfaces)
- Doesn’t scale well! (e.g. the Web)
In communication protocols (e.g. TCP/IP)
- Assume the guy at the other end is brain-dead
- Assume whatever can go wrong will (links break, etc.)
- Results in an “architecture” (e.g. packet-based) that is robust under the assumptions