What Causes Over-engineering and How Can You Prevent It?

Home » Blog » Software » Enterprise Software » What Causes Over-engineering and How Can You Prevent It?

Last year software engineer Fagner Brack wrote an interesting and thoughtful article on “How To Accept Over-Engineering For What It Really Is

The article is very much worth the read in its entirety. There are a few key takeaways though I derived from it personally:

I like the definition of over-engineering (quoted from Jeff Sternal) as “Code that solves problems you don’t have.“.

Fagner’s conclusion is that what constitutes over-engineering depends on both context and the people involved.

Over-engineering is usually brought about by unclear requirements and engineers writing code before having truly understood what that code is supposed to do. Because requirements most of the times aren’t as clearly defined as they could be we tend to try and anticipate requirements and potential future use cases. Hence, knowing and questioning business requirements is quintessential when trying to develop quality software.

The 5 Whys technique – originally introduced at automaker Toyota to get to the bottom of manufacturing problems – can be helpful with this. Repeatedly asking why a feature needs to be implemented in a specific way or even why it needs to be implemented at all can be quite revealing and sometimes brings about surprising, simpler solutions we wouldn’t have thought about if we had accepted requirements as-is.

Another way of thinking about this is approaching challenges from a first-principles point of view that questions conventional thinking and focuses on what we actually want to achieve and what needs to be accomplished to get there.

Finally, abstraction is sometimes seen as something of an end to itself instead of just a means to solve a problem, which is why I usually argue for writing disposable instead of reusable code in order to combat complexity for complexity’s sake in software architecture.

Leave a Comment

* Checkbox GDPR is required

*

I agree

By continuing to browse the site you agree to our use of cookies. Privacy Policy

Privacy Preference Center

Strictly necessary

These cookies are necessary for the site to function.

PHPSESSID: Preserves user session state across page requests.

__cfduid: Used by the content network, Cloudflare, to identify trusted web traffic.

PHPSESSID
__cfduid

Preferences

Remembers the user's submitted data when a comment is submitted in a blog post. The purpose is to aut o-populate form fields for subsequent comments, in order to save time for the user.

wfvt_#

Statistics

Statistic cookies help us to understand how visitors interact with our websites by collecting and reporting information anonymously.

_ga: Registers a unique ID that is used to generate statistical data on how the visitor uses the website.

_gat: Used by Google Analytics to throttle request rate.

_gid: Registers a unique ID that is used to generate statistical data on how the visitor uses the website.

collect: Used to send data to Google Analytics about the visitor's device and behaviour. Tracks the visitor across d evices and marketing channels.

_ga,_gat,_gid
collect

Security

We use Wordfence to secure our website against hacking attempts: https://www.wordfence.com/

wordfence_verifiedHuman

Close your account?

Your account will be closed and all data will be permanently deleted and cannot be recovered. Are you sure?