3 ms·
Yeah. I would phrase it like this: There is two things to avoid: "overengineering" and "underengineering". The first case has happened when it later turns out
by cubefox 2y ago
Yeah. I would phrase it like this:
There is two things to avoid: "overengineering" and "underengineering". The first case has happened when it later turns out that the developer did put in too much work into a feature than was necessary in retrospect, in the second case that they did put in too little work.
At the time of engineering it is usually not clear how much work would constitute over- or underengineering, as this depends on how much the feature gets to be used and evolved in the future.
But usually it makes sense to "err on the side of overengineering". Because (limited) overengineering merely means some development effort was wasted, while underengineering can easily mean years of painful tech debt that is an order of magnitude or two more expensive than the wasted effort from overengineering.
(It's similar to building a house. You usually want to make doubly sure you really do everything right or more than right, because if there are any flaws that turn up later, this often gets very expensive to rectify, sometimes so expensive that it isn't even worth fixing at all.)
- gwbas1c 2y ago> But usually it makes sense to "err on the side of overengineering". Because (limited) overengineering merely means some development effort was wasted, while underengineering can easily mean years of painful tech debt that is an order of magnitude or two more expensive than the wasted effort from overengineering. In our case there was a lot of overengineering by novices, so a lot of the tech debt involves unwinding overengineering to make a simple change. Some of the "credit card" debt was simply using too many 3rd party libraries. > (It's similar to building a house. You usually want to make doubly sure you really do everything right or more than right, because if there are any flaws that turn up later, this often gets very expensive to rectify, sometimes so expensive that it isn't even worth fixing at all.) My fish tank guy told me how he once went to install in a new home, and the general contractor put a structural beam every 3-4 inches under the fish tank. It make it impossible to put in the filters. (In contrast, I only have one structural beam in the middle of my 180 gallon, through-the-wall, tank.)
- cubefox 2y agoI would guess underengineering (quick and dirty solutions) leads to a lot more tech debt in expectation than overengineering.
- gwbas1c 2y agoIt's neither: Underengineering will lead to unmaintainable spaghetti code. Overengineering will also lead to unmaintainable code, but it's more like lasagna.
- Glawen 2y agoVery nicely put
- bdangubic 2y agoin my experience both are more like nachos :)
- cubefox 2y agoI'd rather live in an overengineered house than in an underengineered one.
- gwbas1c 2y agoI found out my house was "overengineered" when a professional architect pointed out a load carrying beam that was much larger than it needed to be. A few years later I found structural issues in a different part of the house. But, because I spent more money on overengineering one part of the house, there's less money to fix real problems.