Conceptual integrity
Conceptual integrity is a quality attribute of a software system. A system with high conceptual integrity is one where all the concepts and their relationships with each other are applied in a consistent way throughout the system. Anywhere you look in the system, you can tell that it is part of an overall design.
The idea of conceptual integrity is central to the thesis of Fred Brooks’s classic book The Mythical Man-Month:
I will contend that Conceptual Integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas.
The Mythical Man-Month (1975)
Today, we tend to use the term [cohesion] to refer to the same qualities of a system.
Conceptual integrity is achieved, in general, by constraining systems to be built from a small pool of languages, infrastructure, architectural and design patterns, and shared libraries. A software system with high conceptual integrity – or high cohesion – tends to be easy to maintain. We can more confidently change part of a system with a cohesive design because we can draw upon our mental map of the architecture and understand intuitively the full repercussions of making the change.
The product’s architect is responsible for the conceptual integrity of a system’s design. Conceptual integrity is difficult to achieve in distributed computing – such as microservice application architectures – where several architects may be responsible for different parts of the system. In this case it is necessary for all architects to have a shared vision for the design of their individual systems.
Conceptual integrity has a tendency to deteriorate over time, as people come and go, the software itself is modified and extended to meet changing business requirements, and the original vision is forgotten.
Examples of systems with high conceptual integrity include:
-
Unix: The design is based on the notion of the "file". Directories, devices and sockets are all types of files.
-
Small Talk: Everything is an object.
-
SQL: All data is in tables with keys and constraints.
-
Lisp: Everything is a list.