All reads

Hints for Computer System Design

Software designDistributed systemsReliability

System design is the discipline of choosing which goals matter most and combining techniques that satisfy them without pretending every desirable property can be maximized.

Summary

Lampson organizes system design around two checklists. STEADY names the goals a system may need: simple, timely, efficient, adaptable, dependable, and desirable to use. AID names recurring techniques: approximation, incrementality, and divide-and-conquer. These are hints rather than laws. A precise financial operation and an approximate search result need different guarantees; a scarce engineering team and a scarce CPU need different optimizations. Good design starts by identifying the dominant constraints, describing the system's abstract state, and then choosing interfaces, representations, replication, indirection, or recovery mechanisms that fit those constraints.

Key ideas

01

Goals compete

Simplicity, speed, efficiency, adaptability, dependability, and user appeal are all valuable, but their relative importance depends on the system.

02

Specify the abstract state

Describe what the system means to its users before implementation machinery obscures the contract.

03

Divide by difference

Stable abstractions and clean interfaces let each part own a different responsibility without exposing all of its internal choices.

The STEADY design lens

Simple enough to understand.

Timely enough to learn from use.

Efficient with the actually scarce resource.

Adaptable to growth and change.

Dependable at the level users need.

Desirable enough to be adopted.

Why it matters now

AI can rapidly generate implementation alternatives. Engineers still have to choose the right goals, specification, boundaries, and trade-offs for the real system.

Continue with the original

This short version preserves the main argument. Follow the source for the complete talk, article, or book.

Original source