Comment on: When does inherience trees in your opinions get too deep? (C#/C++)
Deep inheritance usually means you are inheriting along multiple "axes" of variability. In a language without interfaces or multiple inheritance (and sometimes even in those) you should model multi-dimensional objects with composition.
There are exceptions of course, especially if you are making an extensible framework.
If you are in contact with people even remotely proficient with git, that stage only ever lasts a month at most. There are abstractions and vocabulary you have to master but after that the system is elegant enough to make everything really smooth.