Over overengineering has killed more products than the absence of good development practices. Because of that, it is crucial to learn what it is, its costs, and how we can prevent it. Today’s post will talk about one of the most prevalent issues when creating products: over-engineering them.
What is overengineering?
Over-engineering refers to the fact of designing a product in a more complex way than necessary
- In the context of software, over-engineering is code that solves problems you don’t have
- This is not the exception; it is the norm
Conclusion
Overworking can destroy your startup
- Add unnecessary complexity
- Increase development and maintenance costs
- Reduce your iteration speed
- Avoid you from getting market-fit
- Prevent overengineering by involving and bringing your engineers closer to your customers’ problems
- Don’t fall into the “just in case” trap
Overengineering causes
We try to anticipate the future and be ready for the unknown.
- When we code a feature, it is easy to think that we can make it future-proof by investing a little more time “just in case”.
- But along the way, we have lost valuable time and increased the complexity of the project.
YAGNI
An acronym for “You are not going to need it”
- This rule prevents you from adding anything that is not strictly necessary to solve the problem you have in front of you because the reality is that most likely, “you won’t need it”.
Overengineering Consequences
If engineers do not choose the simplest solution to address a problem, our costs in time and money increase, preventing us from iterating faster.
- On the other hand, it also increases your maintenance costs. Simple code is much easier to program, test, and modify.
KISS
“Keep it simple stupid” refers to the fact that simple systems are easier to repair, evolve, and maintain
- Simplicity should be one of the goals of any design, avoiding any unnecessary complexity
- There comes a point when having fewer options is preferable to having more
Overengineering examples
Microservices-based architectures
- Premature optimization
- Preparing a system to absorb a large amount of traffic with an overly complicated infrastructure setup when you still don’t have users
- Software rewrites
- They rarely serve their purpose and can even take your business away
- Every minute spent in not giving them value is a wasted minute
How to prevent over-engineering?
Turn your engineers into true product engineers by involving them in the day-to-day business, explaining the why after each initiative, and linking it with the metrics that matter for the organization and its vision.
- Define the expectations of a system by using service objectives using SLIs and SLOs to narrow down the problem.