I have had it with over engineering!! If I have to see another code review with over-the-top abstractions and plenty of DB schema changes for a Forgot Password field I’m out of software. Fully giving up to become a bar keep in the west…
You’ve lost me, what’s over-engineering?
Sorry about that, tough day at the office…
So, over-engineering is when a software engineer builds too much to solve a problem, and essentially over complicates the solution. It’s like trying to remove milk that is long past it’s use by date in the fridge so you naturally build a massive missile carrier to get rid of the problem. NO, you say? You’re saying thats too much effort, and that I should pick up the milk and put it in the waste bin? You may have a point.
Why is it so bad though? It’s bad because when you are spending time over-engineering you could have been solving the real problem, or moving on to an issue that will change the business for the better. In terms of startups, you are not failing fast if you are over-engineering your solution.
Another reason over-engineering little things is an issue is down to “marginal gains”. David Brailsford took over as the Performance Director of the British Cycling; Team Sky. His approach was relatively simple if you take a 1% improvement in everything thing you do, these gains will add up to a significant improvement. He promised that Team Sky would win the Tour de France for the first time within 5 years. He was right, they won it in 2013, two years quicker.
Back to over-engineering, if you refactor an hour extra here for no real reason, or if you add a new design pattern just to try it out… these hours add up. Get the code live, learn from the metrics and don’t be tempted to over engineer.
Got it!! Real World examples plz
Wrappers – How many times have you written a wrapper around a 3rd party library and you haven’t swapped it out? Nowadays 3rd party integration is far better, these are tested code bases written by excellent engineers. It’s 2017!!
Make It All Generic – Need to write to the database? Create a generic query. Pass it parameters? Pass generic params. Need to create a factory? Create generic factory-factory. Don’t do it. Duplication is better than the wrong abstraction.
In House Tools – Writing your own tool is going to cause the business to sink time and money into them over the coming years. Tiny open source projects take a lot of effort to maintain and no guarantee they will be used elsewhere. Reuse others, Fork others and contribute to others.
There are more examples here
Make It Stop
There are several ways, to stop over engineering but the first of course is to be aware of it. If you’re a scrum master or a developer, ask questions to the team. “What scenario are you trying to solve?” and dive deep into the scenario.
In standup, or group discussion ask “How could we fail faster on this feature?” Remind the team what is valuable, seeing those metrics change. If the team are over-engineering reminding them that it’s first more valuable to get the feature out than it is to have the feature perfect.
It’s a team effort. Ensure you are all working on vital parts. Keep your pair honest, if you don’t need to refactor X – don’t. For businesses over-engineering leads to the loss revenue, for a selfish gain. And for startups… over-engineering could cost you success.