Richard Gabriel's famous essay "The Rise of Worse is Better" (which, incidentally, I still think was originally published by me when I was editing AI Expert) details the "survival characteristics" of two approaches to software design: the "MIT approach" and the "New Jersey approach" (Bell Labs). He proposes these characteristics and values:
MIT refinement New Jersey refinement
Simplicity: The design must be simple, both in implementation and interface It is more important for the interface to be simple than the implementation. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in design. Correctness: The design must be correct in all observable aspects. Incorrectness is simply not allowed. It is slightly better to be simple than correct. Consistency: The design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness. The design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency. Completeness: The design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.
Gabriel's greatest leap was to put aside his emotional attachment to the MIT approach and observe that even in the intentionally bad picture presented here, the New Jersey approach (labeled "worse-is-better") has "better survival characteristics" than the MIT approach.
When considering my previous post on whether XML is the assembly language or UNIX pipe of Web 2.0, I realized that this was yet another battleground for these two philosophies, but ironically, the "usual suspects" seem to have reversed positions: it's primarily the large vendors who are promoting the MIT-like WS-* stack and the academics / free-thinkers / entrepreneurs who are promoting the simplicity of REST/POX.
Since, as I made it clear in the previous post, I'm a REST/POX proponent, this is somewhat dismaying. Particularly worth deep consideration is the final part of Gabriel's article, where he discusses how the approaches, once popular, evolve towards reuse and flexibility.