This page coins a LanguageSmell related to DesignPatternsAreMissingLanguageFeatures. However, it does not assert that the design pattern is itself the missing language feature, but rather that design patterns are workarounds in the absence of a language feature. A slight change to the feature-set of a language may obviate the need for a wide variety of design patterns. ''From LanguageIdiomClutter:'' If a ''DesignPattern'' common enough to earn that moniker cannot be refactored into and encapsulated by a language library, then the language is missing at least one feature. For lack of a name, one might term this the MissingFeatureSmell. One can resolve this MissingFeatureSmell by including the design pattern directly as a language feature, or by including a higher-level meta-feature that allows one to capture that design pattern (and potentially a great many others having some properties in common with it) into a library. To avoid producing LanguageIdiomClutter, the latter should be considered a better choice (at least for GeneralPurposeProgrammingLanguage''''''s). This MissingFeatureSmell criterion is not subjective, though it does possess practical temporal dependence upon the extent of human knowledge regarding mechanism and what 'can' be encapsulated and refactored. ''From DesignPatternsAreMissingLanguageFeatures:'' If such a library must leak implementation details to the client modules, this is [also] a strong indication of missing feature(s). Above, 'language library' refers to any unit of source code that can usefully be developed and maintained independently of the programs that utilize it, and specifically excludes code generation utilities from outside the language. --------------- MissingFeatureSmell should probably acknowledge relative strength of a smell. How might one measure it? ''From AllPanaceasBecomePoison:'' the lag between intention and realization which is consumed by building infrastructure that other languages give you for free, and [time spent] considering how the infrastructure that you introduce will affect your portability and future options This seems a related smell... if this 'hesitation' is high, the capability to implement an abstraction is likely too low on the FourLevelsOfFeature. --------------- See: LanguageIdiomClutter, LanguageInhibitsRefactoring, KeyLanguageFeature, FourLevelsOfFeature.