principles:principle_of_least_surprise
This is an old revision of the document!
Table of Contents
Principle Of Least Surprise (PLS)
Variants and Alternative Names
- Principle of Least Astonishment (PLA)
- May also be referred to as “rule” or “law” instead of “principle”
Context
Principle Statement
In interface design, always do the least surprising thing.1)
Description
Rationale
Strategies
- Separate methods that change an object (commands) from methods asking the object a question (queries) (see CQS)
- This especially means that a query method should not alter the observable object state
- Name all modules in a way that clearly communicates what the module is and does
- Names of classes shall be nouns representing a specific (real-world) concept (see MP)
- Names of
interfaces
shall be adjectives describing a specific property. This typically results in names ending with -able - Names of command methods shall be verbs (in imperative form)
- Names of query methods shall start with get- or is-
- Names of mathematical functions or the like shall be named by the respective concept (like
sqrt
) - …
- Avoid “clever” solutions which are hard to grasp in favor of simple, dumb ones (see KISS)
- Tend to use the first solution that comes in mind
Caveats
See section contrary principles.
Origin
Evidence
Relations to Other Principles
Generalizations
- Easy to Use and Hard to Misuse (EUHM): A module is easy to use if there is no surprise in how it works.
Specializations
- Command-Query Separation (CQS)
Contrary Principles
Complementary Principles
- Fail Fast (FF): FF is about what a module should do in the case of error. PLS on the other hand is about how the module should behave normally. Furthermore it normally is not a surprise that a module fails when there is an error but a module that doesn't fail when it should, behaves strangely.
- Model Principle (MP): PLS is mainly about how module identifier and module behavior relate to each other. MP tells that modules named according to the model are least surprising.
- Uniformity Principle (UP): When applying PLS, UP should also be considered for naming modules.
Principle Collections
Example
Description Status
Further Reading
- Eric S. Raymond: The Art of Unix Programming: Rule of Least Surprise
- Eric S. Raymond: The Art of Unix Programming: Applying The Rule of Least Surprise
- Joshua Bloch: How to Design a Good API & Why it Matters
1)
Eric S. Raymond: The Art of Unix Programming: Rule of Least Surprise
principles/principle_of_least_surprise.1630572479.txt.gz · Last modified: 2021-09-02 10:47 by 65.21.179.175