User Tools

Site Tools


principles:principle_of_least_surprise

This is an old revision of the document!


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)

Caveats

See section contrary principles.

Origin

Evidence

Relations to Other Principles

Generalizations

Specializations

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

OOD Principle Language
General Principles
ML KISS MIMC DRY GP RoE
Modularization Principles
MP HC ECV
Module Communication Principles
TdA/IE LC DIP
Interface Design Principles
EUHM PLS UP
Internal Module Design Principles
IH/E IAP LSP PSU

Examples

Description Status

Further Reading

principles/principle_of_least_surprise.1363596282.txt.gz · Last modified: 2013-05-20 12:46 (external edit)