3 ms·
Not fearing change and being able to handle change is the skill required; and it can be learned from experience. An over-engineer will attempt to build a syste
by wvenable 10y ago
Not fearing change and being able to handle change is the skill required; and it can be learned from experience. An over-engineer will attempt to build a system that is too flexible and too complicated in order to mitigate all possible changes. Similarly, an under-engineered project will become of patchwork of impossible to maintain code when the changes roll in.
The skill is knowing how to evolve a project -- create new abstractions and layers -- in the face of change. To fundamentally alter the product and keep it working all at the same time.
If you under-engineer a project and you don't know how to do this eventually you'll be faced with the dreaded re-write. Throughout history how many companies and products have failed because of that. If you over-engineer you can suffer with a huge amount weight you don't need. And even then you still might get it wrong and be stuck with an architecture that doesn't work given new requirements -- which might require an even more difficult re-write.
So many engineers can't bring themselves to remove code or change their architecture; so they try and get it right the first time.
- mmazing 10y ago> Not fearing change, being able to handle change is the skill required Agree x1000, I'm currently dealing with a situation stemming from this sort of thing (not being able to handle change, in software design, and philosophically with the architecture). I also keep using the term "evolve" with respects to how to develop a good codebase. You can use design pressure to drive abstraction and logical components of a codebase. If you try to figure all that out from the start, you're going to have a bad time.