Worse is better

"Worse is better" is a concept in software design that suggests that a software system has a higher chance of being successful if it is not designed to be functionally complete and perfectly constructed from the start.

The concept was first articulated by Richard Gabriel in a talk he gave in 1989 at EuroPAL (European Conference on the Practical Applications of Lisp) titled "Lisp: Good News, Bad News, How to Win Big". The relevant excerpt from that talk Gabriel subsequently published online in an essay titled "The Rise of Worse is Better". (Gabriel has also written a short history of the "worse is better" concept in this post.)

The essay describes two software design philosophies:

  • The MIT/Stanford approach ("the right thing"): Prioritizes correctness, consistency, completeness, and simplicity, with a strong emphasis on doing things properly even if doing so adds complexity.

  • The New Jersey approach ("worse is better"): Emphasizes simplicity in implementation over simplicity of the interface, and tolerates some inconsistency or incompleteness if it makes the system easier to build and maintain.

Table 1. Key differences in the two design schools
Quality attribute MIT approach New Jersey approach

Simplicity

Interface simplicity is key

Implementation simplicity is key

Correctness

Must be correct in all aspects

Correctness can be sacrificed for simplicity

Consistency

Highly valued

Can be compromised for simplicity

Completeness

Must cover all expected cases

Can be sacrificed if it complicates implementation

Gabriel uses Unix and C as examples of the "worse is better" (or the "New Jersey" school of thought) in software design. He makes the case that these technologies, though not technically superior, nonetheless tend to outperform (and outlive) more elegant but complex systems like Lisp.

The essay is a provocative exploration of the trade-offs between simplicity and complexity in software design. The essay makes the case that successful software tends to be simple in its implementation, and therefore it is highly adaptable. By comparison, software that strives for technical perfection tends to be inherently more complex, and this additional complexity can hinder its evolution and maintenance.