Software Peter principle
Encyclopedia
The software Peter principle is used in software engineering
to describe a dying project which has little by little become too complex to be understood even by its own developers.
It is well known in the industry as a silent killer of projects, and by the time the symptom
s arise it is often too late to do anything about it. Good managers can avoid this disaster by establishing clear coding practices where unnecessarily complicated code and design is avoided.
The name is used in the book C++ FAQs (see below), and is derived from the Peter Principle
— a theory about incompetence in hierarchical organizations.
. When done properly, it provides the most functionality
using the simplest idioms
. It makes software easier to use by making it simple to create and learn.
Conceptual integrity is achieved when the software’s design proceeds from a small number of agreeing individuals. For software to maintain conceptual integrity, the design must be controlled by a single, small group.
In projects without a strong software architecture
team, the task of design is often combined with the task of implementation and is implicitly delegated among the individual software developer
s. Under these circumstances, developers are less likely to sacrifice personal interests in favor of the interests of the product. The complexity of the product grows as a result of developers adding new designs and altering earlier ones to reflect changes in fashion and individual taste.
by Steve McConnell
. On average, 85 percent of a programmer's time is spent communicating with people, while only 15 percent is spent communicating with the computer. Maintenance programmers spend 50 to 60 percent of their time trying to understand the code they have to maintain and a software program will have, on average, 10 generations of maintenance programmers in its lifetime.
McConnell states that less competent developers favor code with advanced programming language
features over code that is readable
. Code written by these programmers tends to increase software complexity.
in the book Refactoring
by Martin Fowler
. Over time, many such implementation choices degrade the software’s design; making it increasingly difficult to understand.
Software engineering
Software Engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software...
to describe a dying project which has little by little become too complex to be understood even by its own developers.
It is well known in the industry as a silent killer of projects, and by the time the symptom
Symptom
A symptom is a departure from normal function or feeling which is noticed by a patient, indicating the presence of disease or abnormality...
s arise it is often too late to do anything about it. Good managers can avoid this disaster by establishing clear coding practices where unnecessarily complicated code and design is avoided.
The name is used in the book C++ FAQs (see below), and is derived from the Peter Principle
Peter Principle
The Peter Principle states that "in a hierarchy every employee tends to rise to his level of incompetence", meaning that employees tend to be promoted until they reach a position at which they cannot work competently. It was formulated by Dr. Laurence J...
— a theory about incompetence in hierarchical organizations.
Loss of Conceptual Integrity
The conceptual integrity of software is a measure of how well software conforms to a single, simple set of design principles, according to The Mythical Man Month by Fred BrooksFred Brooks
Frederick Phillips Brooks, Jr. is a software engineer and computer scientist, best known for managing the development of IBM's System/360 family of computers and the OS/360 software support package, then later writing candidly about the process in his seminal book The Mythical Man-Month...
. When done properly, it provides the most functionality
Function (engineering)
In engineering, a function is interpreted as a specific process, action or task that a system is able to perform .-In engineering design:In the lifecycle of engineering projects, there are usually distinguished subsequently: Requirements and Functional specification documents. The Requirements...
using the simplest idioms
Programming idiom
A programming idiom is a means of expressing a recurring construct in one or more programming languages. Generally speaking, a programming idiom is an expression of a simple task or algorithm that is not a built-in feature in the programming language being used, or, conversely, the use of an...
. It makes software easier to use by making it simple to create and learn.
Conceptual integrity is achieved when the software’s design proceeds from a small number of agreeing individuals. For software to maintain conceptual integrity, the design must be controlled by a single, small group.
In projects without a strong software architecture
Software architecture
The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both...
team, the task of design is often combined with the task of implementation and is implicitly delegated among the individual software developer
Software developer
A software developer is a person concerned with facets of the software development process. Their work includes researching, designing, developing, and testing software. A software developer may take part in design, computer programming, or software project management...
s. Under these circumstances, developers are less likely to sacrifice personal interests in favor of the interests of the product. The complexity of the product grows as a result of developers adding new designs and altering earlier ones to reflect changes in fashion and individual taste.
Programmer Incompetence
The best software developers understand the importance of communicating with people over communicating with the computer, according to Code CompleteCode Complete
Code Complete is a software development book, written by Steve McConnell and published in 1993 by Microsoft Press, urging developers to get past code and fix programming and the "big design up front" waterfall model...
by Steve McConnell
Steve McConnell
Steven C. McConnell is an author of many software engineering textbooks including Code Complete, Rapid Development, and Software Estimation...
. On average, 85 percent of a programmer's time is spent communicating with people, while only 15 percent is spent communicating with the computer. Maintenance programmers spend 50 to 60 percent of their time trying to understand the code they have to maintain and a software program will have, on average, 10 generations of maintenance programmers in its lifetime.
McConnell states that less competent developers favor code with advanced programming language
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....
features over code that is readable
Readability
Readability is the ease in which text can be read and understood. Various factors to measure readability have been used, such as "speed of perception," "perceptibility at a distance," "perceptibility in peripheral vision," "visibility," "the reflex blink technique," "rate of work" , "eye...
. Code written by these programmers tends to increase software complexity.
Programmer Inexperience
Inexperienced programmers sometimes make implementation choices that work but have unintended negative consequences. The most common of these mistakes are cataloged and referred to as smellsCode smell
In computer programming, code smell is any symptom in the source code of a program that possibly indicates a deeper problem.Often the deeper problem hinted by a code smell can be uncovered when the code is subjected to a short feedback cycle where it is refactored in small, controlled steps, and...
in the book Refactoring
Refactoring
Code refactoring is "disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior", undertaken in order to improve some of the nonfunctional attributes of the software....
by Martin Fowler
Martin Fowler
-Online presentations:* at RailsConf 2006* at JAOO 2006* at QCon London 2007 * at QCon London 2008 * at ThoughtWorks Quarterly Technology Briefing, October 2008...
. Over time, many such implementation choices degrade the software’s design; making it increasingly difficult to understand.