Characteristics of Good Specifications
Given the set of desired behaviours/functionalities/requirements B and the set of specifications S of an entity E,
Consistent: Every pair of specifications p and q in S should be mutually consistent, i.e., p does not contradict q and q does not contradict p. This ensures E can indeed be realized/implemented.
Sufficient (Maximal Behaviour): S should allow all behaviours B of E. This ensures against under-engineering of E.
Necessary (Minimal Specification): Every specification p in S should be necessary to allow at least one behaviour of E from B. This ensures against over-engineering of E.
Checkable: We should be able to check if a realization/implementation of E satisfies S. This ensures that the realization/implementation is indeed E.