proomt

Search

Search posts, papers, and topics

Hall of Fame

Engineering writing worth reading more than once, chosen by hand rather than ranked. Most of it is decades old and still the clearest statement of its idea.

62 works · 8 sections · 1968–2024

Distributed systems16

  1. Time, Clocks, and the Ordering of Events in a Distributed System

    Leslie Lamport36 min

    Where "happened before" comes from, and the logical clocks every distributed system since has leaned on.

  2. The Byzantine Generals Problem

    Leslie Lamport, Robert Shostak, Marshall Pease52 min

    How to agree when some participants lie, and the proof that a third of them is the limit.

  3. Paxos Made Simple

    Leslie Lamport20 min

    Consensus explained plainly, after the original paper's parable of a Greek parliament defeated most readers.

  4. In Search of an Understandable Consensus Algorithm (Raft)

    Diego Ongaro, John Ousterhout1 h

    Consensus designed to be understood first, which is why etcd, Consul and CockroachDB implement this and not Paxos.

  5. A Note on Distributed Computing

    Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall38 min

    Why a remote call can never be made to look like a local one, argued before most of the systems that tried.

  6. Dynamo: Amazon's Highly Available Key-value Store

    Giuseppe DeCandia et al.1 h

    Consistent hashing, vector clocks and sloppy quorums in one system; Cassandra and Riak descend from it.

  7. The Google File System

    Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung1 h

    Storage built on the assumption that disks fail constantly, which turned out to be the right one.

  8. MapReduce: Simplified Data Processing on Large Clusters

    Jeffrey Dean, Sanjay Ghemawat39 min

    Two functions that made thousand-machine batch jobs something one engineer could write.

  9. Bigtable: A Distributed Storage System for Structured Data

    Fay Chang et al.48 min

    The wide-column model behind HBase and a generation of databases that followed.

  10. The Chubby Lock Service for Loosely-Coupled Distributed Systems

    Mike Burrows59 min

    Why coordination belongs in a small, boring, highly available service; ZooKeeper and etcd are its heirs.

  11. Spanner: Google's Globally-Distributed Database

    James C. Corbett et al.46 min

    External consistency across continents, bought with GPS and atomic clocks and a bounded uncertainty interval.

  12. End-to-End Arguments in System Design

    J. H. Saltzer, D. P. Reed, D. D. Clark26 min

    The principle that shaped the internet: put a function where it can be done correctly, usually at the ends.

  13. The Log: What every software engineer should know about real-time data's unifying abstraction

    Jay Kreps54 min

    The append-only log as the thing databases, replication and stream processing all turn out to be; the idea behind Kafka.

  14. Notes on Distributed Systems for Young Bloods

    Jeff Hodges17 min

    The lessons people otherwise learn by paging themselves at 3am, written down in one place.

  15. Please stop calling databases CP or AP

    Martin Kleppmann15 min

    Why the CAP theorem, as usually quoted, tells you almost nothing about a real database.

  16. Jepsen analyses

    Kyle Kingsbury1 min

    What databases actually do under partitions, as opposed to what their documentation says.

Databases and storage3

  1. Architecture of a Database System

    Joseph M. Hellerstein, Michael Stonebraker, James Hamiltonpaper3 h

    How a relational database is actually built, process model to query executor, by people who built several.

  2. The Internals of PostgreSQL

    Hironobu Suzukiessay7 min

    MVCC, the WAL, vacuum and the buffer manager, explained from the source of one real database.

  3. How Discord Stores Trillions of Messages

    Bo Ingramessay11 min

    A migration off Cassandra told with the hot partitions, the request coalescing and the numbers left in.

The craft18

  1. Go To Statement Considered Harmful

    Edsger W. Dijkstra1 min

    A short letter to the editor that started structured programming, and every "considered harmful" title since.

  2. On the Criteria To Be Used in Decomposing Systems into Modules

    David L. Parnaspaper21 min

    Information hiding, stated clearly for the first time: split a system by what is likely to change.

  3. Hints for Computer System Design

    Butler W. Lampsonpaper1 h

    Decades of systems design distilled into slogans that have aged remarkably well.

  4. Programming as Theory Building

    Peter Naur

    Why a program is the theory in its authors' heads, and what is lost when they leave.

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

    Frederick P. Brooks, Jr.paper34 min

    Why no single technique will ever make software an order of magnitude easier, and which difficulty is essential.

  6. The Rise of "Worse is Better"

    Richard P. Gabrielessay7 min

    Why the simple, incomplete design spreads and the right one does not.

  7. Why Functional Programming Matters

    John Hughespaper38 min

    The case for higher-order functions and laziness as tools for gluing programs together.

  8. Big Ball of Mud

    Brian Foote, Joseph Yoderpaper1 h

    An honest account of the architecture most systems actually have, and why it keeps winning.

  9. Things You Should Never Do, Part I

    Joel Spolskyessay6 min

    The argument against rewriting from scratch, which every team rediscovers once.

  10. The Joel Test: 12 Steps to Better Code

    Joel Spolskyessay16 min

    Twelve yes-or-no questions about a team, most of which still sort good ones from bad.

  11. Teach Yourself Programming in Ten Years

    Peter Norvigessay12 min

    The antidote to "learn it in 21 days", with the latency table half the internet later copied.

  12. Out of the Tar Pit

    Ben Moseley, Peter Markspaper2 h

    Complexity as the root problem of software, and state as the root of complexity.

  13. Execution in the Kingdom of Nouns

    Steve Yeggeessay13 min

    What happens to a language that makes verbs second-class, told as a fable.

  14. Falsehoods Programmers Believe About Names

    Patrick McKenzieessay3 min

    Forty assumptions about people's names, every one of them wrong, and a genre of lists that followed.

  15. Simple Made Easy

    Rich Hickeytalk9 min

    The difference between simple and easy, and why confusing them produces tangled systems.

  16. Choose Boring Technology

    Dan McKinleyessay8 min

    Innovation tokens: every team can afford only a few, so spend them where they matter.

  17. Write code that is easy to delete, not easy to extend

    tefessay15 min

    Designing for the code you will throw away, which is most of it.

  18. Parse, Don't Validate

    Alexis Kingessay18 min

    Let the type system remember what you have already checked, instead of checking it again.

Performance5

  1. What Every Computer Scientist Should Know About Floating-Point Arithmetic

    David Goldbergpaper2 h

    Why 0.1 + 0.2 is not 0.3, and everything else that follows from representing reals in binary.

  2. What Every Programmer Should Know About Memory

    Ulrich Drepperpaper7 h

    Caches, TLBs and NUMA from the hardware up, and what they mean for the code you write.

  3. Latency Numbers Every Programmer Should Know

    Jeff Dean, Peter Norvig; interactive by Colin Scott1 min

    An L1 hit to a transatlantic round trip, on one scale, updated year by year.

  4. The USE Method

    Brendan Greggessay16 min

    Utilisation, saturation and errors for every resource: a checklist that finds bottlenecks instead of guessing.

  5. The Tail at Scale

    Jeffrey Dean, Luiz André Barrosopaper1 min

    Why the slowest one percent of requests decides how fast a large system feels, and how to hedge against it.

Security4

  1. Reflections on Trusting Trust

    Ken Thompsontalk9 min

    A compiler that inserts a backdoor into itself: the Turing Award lecture that ended naive trust in source code.

  2. Smashing the Stack for Fun and Profit

    Aleph Oneguide31 min

    The Phrack article that taught a generation how buffer overflows actually work.

  3. Security Engineering

    Ross Anderson5 min

    How real systems fail against real attackers, from banking to warfare; free in full.

  4. The xz backdoor disclosure

    Andres Freundpostmortem8 min

    A multi-year supply-chain attack on a compression library, caught because SSH logins got half a second slower.

Reliability and operations6

  1. How Complex Systems Fail

    Richard I. Cookessay2 min

    Eighteen observations from medicine that describe every production outage there has ever been.

  2. On Designing and Deploying Internet-Scale Services

    James Hamiltonpaper43 min

    The operations checklist from running some of the largest services of its time, most of it still right.

  3. The Twelve-Factor App

    Adam Wigginsessay1 min

    The conventions that made applications portable across platforms, now so common they read as obvious.

  4. Reading postmortems

    Dan Luuessay10 min

    What a pile of public postmortems says about why systems fail: error handling, configuration, and not much else.

  5. Site Reliability Engineering

    Betsy Beyer et al. (Google)1 min

    Error budgets, toil and blameless postmortems, from the team that named the discipline; free in full.

  6. Details of the Cloudflare outage on July 2, 2019

    John Graham-Cummingpostmortem22 min

    A regular expression that took down a large part of the web, and the model for how to write it up.

Languages, systems and the web7

  1. The UNIX Time-Sharing System

    Dennis M. Ritchie, Ken Thompsonpaper43 min

    Files, processes and pipes, described by the two people who designed them.

  2. Growing a Language

    Guy L. Steele Jr.essay43 min

    A talk on language design delivered using only one-syllable words, until it defines new ones.

  3. Responsive Web Design

    Ethan Marcotteessay10 min

    The article that gave the web one layout for every screen, and a name to the idea.

  4. Learnable Programming

    Bret Victoressay41 min

    What a programming environment would look like if it were designed for understanding rather than typing.

  5. High Performance Browser Networking

    Ilya Grigorik

    TCP, TLS, HTTP/2 and WebSockets, and what each costs the page a reader is waiting for; free in full.

  6. The Web's Grain

    Frank Chimeroessay17 min

    Designing with the edgeless, fluid nature of the web instead of against it.

  7. Crafting Interpreters

    Robert Nystromguide13 min

    Two complete interpreters built from nothing, a line at a time; free in full.

Machine learning3

  1. Hidden Technical Debt in Machine Learning Systems

    D. Sculley et al.paper25 min

    Why the model is the small box in the middle of a machine learning system, and the rest is where it breaks.

  2. Attention Is All You Need

    Ashish Vaswani et al.paper27 min

    The transformer, introduced as a translation model, and the architecture under every large language model since.

  3. The Bitter Lesson

    Rich Suttonessay5 min

    Seventy years of AI research says general methods that scale with compute beat hand-built knowledge.