Main Page

From Worse Is Better

Revision as of 05:11, 3 June 2011 by Keith Schwarz (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Worse is Better Considered Harmful

Abstract

In 1991, Richard Gabriel published an influential article "The Rise of Worse is Better". This article argued for a design philosophy he dubbed worse-is-better in which implementation simplicity is afforded greater import than interface simplicity. Gabriel's article was widely read in the software engineering community and has since influenced a generation of programmers.

The original article focused on the success of Unix and the C programming language, which Gabriel describes in what is probably the most famous quote from his paper:
The worse-is-better philosophy means that implementation simplicity has highest priority, which means Unix and C are easy to port on such machines. Therefore, one expects that if the 50% functionality Unix and C support is satisfactory, they will start to appear everywhere. And they have, haven't they? Unix and C are the ultimate computer viruses.

Worse-is-better in this sense holds simplicity of implementation to be the highest priority because it allows new designs to spread virally.

We contend that the worse is better design philosophy, while highly successful, is inherently misguided. In particular, we argue that worse is better succeeds by imposing a disproportionate cost on users. Since the first design which solves a useful subset of a problem tends to win even in the face of better, but later, competition (the so-called first-mover advantage), successful but suboptimal designs often become entrenched. To avoid this problem and encourage the most useful designs, we propose a more nuanced development philosophy, growable-is-better, which offers many of the benefits of worse-is-better but helps contain the cost to the community.

If the growable-is-better philosophy were to replace the worse-is-better philosophy, users of software libraries, technical standards, and extensible applications and platforms would have much more powerful tools with only a small additional investment by the original designers. We discuss the differences between these philosophies, which share many of the same strengths. Finally, we discuss techniques for implementing growable-is-better in new software systems.

Contents

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox