It's not about how much complexity. It is about how well complexity is managed. This is one of those things that is not taught because the people who might teach it seem to think it is obvious. It is not obvious and it is not easy; but the legibility of software depends entirely upon it, and therefore so does its maintainability and testability.