I wonder what would be a good definition of term "over-engineering" as applied to software development. The expression seems to be used a lot during software design discussions often in conjunction with "excessive future-proofing" and it would be nice to nail down a more precise definition.
Overengineering (or over-engineering, or over-kill) is the act of designing a product or providing a solution to a problem in an overly complicated manner, where a simpler solution can be demonstrated to exist with the same efficiency and effectiveness as that of the original design.
What is Over-Engineering? Over-engineering is like overthinking — you're trying to find solutions to problems that either don't exist yet or are too early to tackle. In the end, you've designed and implemented your system with too much logic, too many abstractions, and an excess number of flows.
Four ways to avoid overengineeringMake requirements transparent. Be sure to communicate dependencies and collaborate as necessary to come up with the best solutions. Evaluate your product early and often with simulations of how it will be used so that you can identify if your product is delivering the expected value.
The major difference is that software engineering involves more of the design elements, implementation, testing, and maintenance of your software. Computer engineering deals more with the physical or hardware systems.
Contrary to most answers, I do not believe that "presently unneeded functionality" is over-engineering; or it is the least problematic form.
Like you said, the worst kind of over-engineering is usually committed in the name of future-proofing and extensibility - and achieves the exact opposite:
The truth is that the design that is most easily adapted to new and changing requirements (and is thus the most future-proof and extensible) is the design that is as simple as possible.
Contrary to popular belief, over-engineering is really a phenomena that appears when engineers get "hubris" and think they understand the user.
I made a simple diagram to illustrate this:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With