Meta

Table of Contents

Principles Wiki

About this Wiki

This wiki is a place to collect, examine, and discuss software design knowledge in a systematic way. Currently there is a strong focus on (object-oriented) design principles (SOLID, GRASP, DRY, KISS, …). In the future other forms of experience reuse, like patterns and anti-patterns, will also be explored and interconnected with the principles.

Principles and Principle Languages

Just like common solution schemes to recurring problems are documented using patterns, common assessment rules telling good solutions from bad ones can be described using principles. So principles are another form of experience reuse. There are dozens and maybe hundreds of such principles, some of which are examined here.

Principle languages similarly to pattern languages interconnect principles such that the consideration of one principle inevitably leads to other principles which are likely to be relevant in the same context. Currently there is one principle language described here (OOD Principle Language) and others will follow in the future.

Principles and Design Types

The validity a a certain principles is rarely disputed. But that different developers put different weight on them. Almost no-one would claim that KISS is not a valid principle. But there are ones who think GP is more important.

It turns out that developers can be characterized by which principles they favor when making design decisions. Understanding these different attitudes helps in communicating about design.

design-types.net describes a system of 16 design types characterizing developers in the aforementioned way. Each design type links back here to those principles each type favors or disregards. There is a questionnaire for testing yourself, a questionnaire for assessing colleagues and some statistics about those who already took part.