“End-To-End Arguments In System Design”, 1984 ():
[The End-to-end principle: modularity creates inefficiency due to redundancy and wasted duplicated work which is pragmatically unnecessary for the end-purpose (eg. checksums being computed at many layers in computer networking even when the connection is reliable enough that messages are rarely corrupted & one only needs a checksum for verification at the last step by the final user—If your packets are never corrupted, you’re wasting too much on error-correction & reliability!)]
This paper presents a design principle that helps guide placement of functions among the modules of a distributed computer system. The principle, called ’the end-to-end argument’, suggests that functions placed at low levels of a system may be redundant or of little value when compared with the cost of providing them at that low level. Examples discussed in the paper include bit error recovery, security using encryption, duplicate message suppression, recovery from system crashes, and delivery acknowledgement. Low level mechanisms to support these functions are justified only as performance enhancements.
View PDF: