The task of the software development team is to engineer the illusion of simplicity.
A fool with a tool is still a fool.
Hierarchy is a kind of order of abstractions.
C++ also supports the notion of friends: cooperative classes that are permitted to see each other's private parts.
The function of good software is to make the complex appear to be simple.
All of life is iterative. It goes back to the point I made earlier, which is you can't a priori know enough to even ask the right questions.