Now client wants version 2, so i thought i take version 1 and extend it. In large-scale systems, it creates major complex mess, when modifying you have to crawl through large inheritance tree and keep in mind how one change will affect all objects and interdependencies in this huge inheritance tree. Then you have to recompile every time you make some change, to make sure that changes didn't result bugs. What you will be doing is stealing time from development to design your inheritance-tree. Objects begin small, with minimal funcionality, and over time acquire more features, as it becomes clear from real-time use what those features should be.
Old code is protected by continuing to support old interfaces, while implementing new ones.
I dont need ego-driven bs that this world is built upon, I need to grow as developer. Find out how.