Worse is Evolvable?

by Charles Miller on October 9, 2002

Mark Pilgrim talks about evolvable formats, specifically the mess that is RSS 0.9x/2.0:

The problem with that list of RSS deficiencies is that it is also a list of necessities—RSS has flourished in a way that no other syndication format has, not despite many of these qualities but because of them. The very weaknesses that make RSS so infuriating to serious practitioners also make it possible in the first place. (Pilgrim)

Exactly how many times are we going to rewrite Richard Gabriel's The rise of “Worse is Better” in our lifetimes? While it's great to strive for perfection, it's inevitable1 that when you sacrifice perfection for convenience, you're far more likely to succeed.

From Worse is Better we have the “correct” approach:

  • Simplicity-the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation.
  • Correctness-the design must be correct in all observable aspects. Incorrectness is simply not allowed.
  • 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.
  • 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.

vs the approach that inevitably succeeds:

  • Simplicity-the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.
  • Correctness-the design must be correct in all observable aspects. It is slightly better to be simple than correct.
  • Consistency-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 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.

The original essay was about C vs Lisp, and played very hard on the computational efficiency side of the argument, but “Worse is Better” holds true across the board. Just look at Java vs Smalltalk, or RSS vs RSS.

Addendum: Mark's essay on RSS is adapted from Clay Shirky's essay on HTML/HTTP, which is really just more evidence for the underlying conclusion. Worse is better.

1 This was originally the typo ‘ineviable’, which I am convinced was a Freudian concatenation of ‘inevitable’ and ‘unenviable’

Previously: XML is Not A Programming Language

Next: The Joy of HTML