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)
- Doesnt 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