4 ms·
In my experience most over-engineering can be explained by a lack of understanding. When we design it, we don't know what matters and our guesses are wrong; and
by adonovan 3y ago
In my experience most over-engineering can be explained by a lack of understanding. When we design it, we don't know what matters and our guesses are wrong; and when we modify it later, we don't have time to figure out how it really works. Both of those problems can be fixed by simply spending more time to understand, but time is money.
- j4yav 3y agoI think, related, is the hope that switching to a new framework will somehow solve everything annoying about the old stack, and let you undo past mistakes. In reality, though, if you're lucky enough not to end up supporting two stacks at once for a long time, you end up making lots of new mistakes again.
- PH95VuimJjqBqy 3y agoNot a lack of understanding, a misalignment of values. I had a team once implement the MediatR pattern for a < 5k LoC codebase (I'm guessing at its size but it was made larger due to the overhead of the MediatR pattern). When I asked them to remove it, it became a political fight that went to the VP because they were convinced that sort of flexibility was a good idea. Fast forward a year and they have a new technical leader and he thought I wanted that complexity until we had a conversation and when I mentioned I didn't like it he confessed to me he wanted to rip it all out. People value the wrong thing too often.
- randomdata 3y ago> they were convinced that sort of flexibility was a good idea. Believing flexibility is needed still suggests a lack of understanding.
- Terr_ 3y agoI've often say "design for deletion": Most of those long-term "flexibility someday" needs are best-met by making sure the inflexible modules or flows can be clearly identified and ripped out for replacement. This leads to a certain kind of decoupling, although with a higher tolerance for coupling that can kept in check by static analysis.
- PH95VuimJjqBqy 3y agonot being absolutely perfect suggests a lack of understanding, but at that point we're engaged in a tautology. Values are those things that help guide you in the face of imperfect information. Not having a crystal ball that can predict the future perfectly means you have imperfect information.
- randomdata 3y agoPerfection is not necessary for you to be confident that you have a reasonable understanding and can build something to match. It is possible the confidence will prove to be misguided, but you can deal with that later. To prioritize flexibility means that one lacks the understanding required to even build a misguided confidence.
- PH95VuimJjqBqy 3y ago> It is possible the confidence will prove to be misguided At which point your description of a lack of understanding applies, hence my comment.
- randomdata 3y agoThat does not imply there is a lack of understanding in the moment. Understanding does not seek perfection towards future events. However, if you do not even understand what is known in the present, that is when you will start to lean on flexibility.
- PH95VuimJjqBqy 3y agoWe can always beat a word into the shape we want it, but the phrase has a common meaning, I would suggest you use a different word.