: System-Design


A Curated List of Project Considerations

Project considerations

Above all else, it has to work.

System design hints. Elegant and simple design.

  • Keep it simple (stupid), don’t be Richard Hendricks from Silicon Valley trying to explain electrons to a user. Sometimes the strawman or brute force solution is good enough.

  • Fail faster, build one design to throw it away, you arent going to get it right the first time. Google spends years getting things wrong too (it took them ~seven years to make Google Spanner).

Butler Lampson's System Design Hints

A summary of Butler Lampson’s original paper

2 Functionality

2.1: Keep it simple

  • Do one thing at a time, do it well. Make small, working, effective interfaces, they are contracts, don’t try to do too much, don’t generalize.

  • Get it right.

  • Write specifications (then implement), document the abstract functionality provided by your application and its interfaces.

2.2: Corollaries

  • Make it fast rather than general or powerful.

  • Don’t hide the power of the interface, clients should know what it does well.