Out of the Tar Pit

Main Argument

Complexity is the single greatest difficulty in building and maintaining large software, and most of it is accidental, introduced by us, rather than essential to the problem. The two largest sources of accidental complexity are mutable state and control flow. The paper argues for radically minimizing both: keep only the essential state the problem truly requires, express everything derivable as pure functions of that state rather than storing it, and prefer declarative specifications over imperative step-by-step control. Its concrete proposal, Functional Relational Programming, separates essential state and essential logic from a clearly isolated layer of accidental state and control kept for performance and similar reasons.

Key Takeaways

  • Complexity is the root cause of most software problems; understandability is what we lose to it.
  • Most complexity is accidental, not essential; the high-leverage move is to attack the accidental.
  • Mutable state is the largest single source of complexity: it makes behavior depend on history and explodes the number of states to reason about.
  • Control flow (explicit ordering) is the second source; declarative programming removes most of it.
  • Derived data should be defined as a function of essential state, not stored and mutated separately.
  • Referential transparency (pure functions, no side effects) lets you reason locally and replace any expression with its value.
  • Separate the essential (state and logic) from the accidental (state and control), and isolate the accidental.

Concepts Extracted