Overengineering
(or
over-engineering) is the designing of a product to be more robust or complicated than is necessary for its application, either (charitably) to ensure sufficient
factor of safety, sufficient functionality, or because of design errors. Overengineering can be desirable when safety or performance on a particular criterion is critical, or when extremely broad functionality is required, but it is generally criticized from the point of view of
value engineering
as wasteful. As a
design philosophy, such overcomplexity is the opposite of the
less is more
school of thought (and hence a violation of the
KISS principle
and
parsimony).
Overengineering generally occurs in high-end products or specialized market criteria, and takes various forms. In one form, products are
overbuilt,
and have performance far in excess of needs (a
family sedan
that can drive at 300 km/h, or a home
video cassette recorder
with a projected lifespan of 100 years), and hence are more expensive, bulkier, and heavier than necessary. Alternatively, they may be
overcomplicated
– the design may be far more complicated than is necessary for its use, such as a modern
text editor
asking whether files should be saved in
ASCII,
EBCDIC
or various
multi-byte
formats. Overcomplexity reduces
usability
of the product by the
end user, and can decrease
productivity
of the design team due to the need to build and maintain all the features.
A related issue is
market segmentation
– making different products for different market segments. In this context, a particular product may be more or less suited for a particular market segment, and may be over- or under- engineered relative to an application.
Because it had been engineered so that no single piece failed first – no piece was over-engineered relative to the others, and they thus all collapsed at the same time.