I love reading computer manuals, be they about software architecture, algorithmic, programming, security, cloud storage and operations, big data, machine learning or others.
The following text is taken from the book “AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis“
Also Known As: Gold Plating, Standards Disease, Make Everybody Happy, Political Party
Root Causes: Pride, Avarice
Anecdotal Evidence: “A camel is a horse designed by a committee”
Object orientation is often described as a two-generation technology. Data-centric object analysis is characteristic of the first generation, and design patterns are characteristic of the second. The first generation espoused a philosophy that “objects are things you can touch”, A consequence is that virtually all designs are uniquely vertical. In the first generation, people believed in a number of assumptions that were unsubstantiated by practice. One of these was that project teams should be egalitarian; in other words, that everyone should have an equal say and that decisions are democratic. This leads to Design by Committee. Given that only a small number of object developers can define good abstractions, the majority rule invariably leads to a diffusion of abstraction and excess complexity.
A complex software design is the product of a committee process. It has so many features and variations that it is infeasible for any group of developers to realize the specifications in a reasonable time frame. Even if the designs were possible, it would not be possible to test the full design due to excessive complexity, ambiguities, over constraint, and other specification defects. The design would lack conceptual clarity because so many people contributed to it and extented it during its creation.
SYMPTOMS AND CONSEQUENCES
– The design documentation is overly complex, unreadable, incoherent or is excessively defective.
– The design documentation is voluminous.
– Convergence and stability and missing from the requirements and the design.
– The committee meetings resemble bull sessions during which substantive issues are rarely discussed and progress is painstakingly slow. People talk and walk serially; that is, there a single thread of discussion, and most people are unproductive most of the time.
– The environment is politically changed, and few decisions and actions can be undertaken outside of the meeting; and the meeting process precludes reaching timely decisions.
– There is no prioritization of the design features, and no ready answer to the questions: which features are essential? Which features will be implemented in the initial delivery?
– Architects and developers have conflicting interpretations of the design;
– Design development becomes significantly over-budget and overdue.
– It becomes necessary to employ specialists to interpret, develop, and manage the specifications. In other words, dealing with each specification that was designed by a committee becomes a full-time job.
– No designated project architect.
– A degenerate or ineffective software process.
– Bad meeting processes, marked by lack of facilitation or ineffective facilitation. The meetings are bull sessions; The loudest people win and the level of discourse is the lowest common denominator of sophistication.
– Gold plating – That is, features are added to the specification based ob proprietary interests. This can happen for many reasons: marketability, the existence of proprietary technologies already containing these features, or speculative placement of features in the specification for potential future work.
– Design and editing is attempted during meetings with more than five people.
– Explicit priorities and a software-value system are undetermined.
– Concerns are separated and reference models are not used.
There are few exceptions to the Design by Committee AntiPattern, and they occur when the committee is small: approximately 6 to 10 people; more than that and consensus becomes unlikely; fewer than six people and the breadth of understanding and experience become insufficient. Also, committees should often be tiger teams, and a small group of “experts” in a particular problem domain, organized for the duration of the solution for a specific problem or issue.