Overengineering
Definition
Overengineering (or over-engineering), is the act of designing a product or providing a solution to a problem in an elaborate or complicated manner, where a simpler solution can be demonstrated to exist with the same efficiency and effectiveness as that of the original design.
As a design philosophy, it is the opposite of the minimalist ethos of "less is more" (or: βworse is betterβ) and a disobedience of the KISS principle.
Overengineering can decrease the productivity of design teams, because of the need to build and maintain more features than most users need.
Excessive pursuit of simplicity and minimalism in a product in order to avoid these effects, however, can result in premature optimisation, potentially to the detriment of the project due to diminishing returns on time and effort invested in the design process, thus also constituting overengineering.
Wikipedia (2023-02-12)
Overengineering in Software Development
Examples in Software Development
- Microservices-based architectures (often not necessary, e.g. for startups)
- Software rewrites
Prevent over-engineering
- developers need to understanding the actual user's problems and the business goals
- YAGNI β You aren't gonna need it
- KISS principle β Keep it simple, stupid
- Choose Boring Technology