The Two Abstractions of System Design: Hide or Reduce
Summary
Murat Demirbas distinguishes two notions of abstraction in system design: modularity abstraction that hides internals and modeling abstraction that reduces a system to its essential behavioral skeleton. He argues these are fundamentally different goals and provides examples from distributed systems (Lamport clocks, Paxos, TrueTime, linearizability, MapReduce) to illustrate how modeling abstractions reveal concurrency and enable reasoning about invariants. The post sets up a follow-up that will connect these ideas to practical design and coaching readers to recognize when to apply each form of abstraction.