proomt

Search

Search posts, papers, and topics

Hall of Fame

Hall of FameRich Hickey20119 min readtalkintro

Simple Made Easy

Summary

Rich Hickey argues that simplicity, not easiness, is the foundation of reliable software. He outlines how to choose simple constructs and design abstractions to keep systems understandable and changeable.

  • Simplicity is a prerequisite for reliability; easy shortcuts lead to hidden complexity.
  • Prefer simple constructs (values, pure functions, immutable data) over complex ones (stateful objects, inheritance, imperative loops).
  • Design by answering what, who, how, when, where, why, and keep abstractions small and declarative.
  • Use encapsulation and queues to avoid direct coupling and keep components independent.

Engineers building long‑lived systems should care because simplicity reduces bugs, eases maintenance, and improves scalability.

5/10

Related reading

  1. No Silver Bullet: Essence and Accidents of Software Engineering

    Brooks argues that software development’s fundamental difficulty lies in essential complexity—conceptual design, conformity, changeability, and invisibility—rather than accidental implementation issues. Consequently, no single technology or management trick will yield an order‑of‑magnitude productivity boost; progress must come from disciplined, incremental improvements.

    Hall of Fameunc.edu34 minpaper
  2. Out of the Tar Pit

    The paper argues that most complexity in large software systems is accidental, caused mainly by mutable state and tangled control flow. It proposes minimizing accidental complexity by using pure functional programming together with a relational data model, emphasizing simplicity over extensive testing.

    Hall of Famecurtclifton.net98 minpaper
  3. Learnable Programming

    Bret Victor argues that teaching programming requires environments that make code vocabulary, state, and execution flow visible and understandable, not just live‑coding output. He proposes design principles—transparent labeling, contextual explanations, and controllable visualizations—to help learners think rather than memorize.

    Hall of Fameworrydream.com41 min
  4. Hints for Computer System Design

    Lampson’s 1983 essay distills practical design hints for computer systems, emphasizing simple, well‑defined interfaces, predictable costs, and separating common‑case from worst‑case paths. The advice, illustrated with examples from Alto, Dorado, and early OSes, remains relevant for modern system architects.

    Hall of Famemicrosoft.com62 minpaper
  5. Write code that is easy to delete, not easy to extend

    The article argues that code should be written to be easy to delete rather than to be reusable, advocating duplication, layering, and disposable implementations. It suggests copy‑pasting early, isolating hard‑to‑change parts, using thin wrappers, and accepting big, throw‑away code to simplify future removal.

    Hall of Fameprogrammingisterrible.com15 min
  6. On Designing and Deploying Internet-Scale Services

    James Hamilton’s 2007 paper distills a set of concrete best‑practice tenets for building operations‑friendly, internet‑scale services—design for failure, keep things simple, and automate everything. Applying these guidelines (commodity hardware, single‑version software, redundancy, multi‑tenancy) enables ratios of thousands of servers per administrator while maintaining reliability.

    Hall of Fameusenix.org43 minpaper