Главное, чему нужно следовать при размещении инклюдов - принцип наибольшей закрытости - в *.h файл должно торчать как можно меньше сущностей.
Например, за размещение в *.h файле матюка типа using namespace std; разместившему грозит неприятный разнос на code review c вердиктом УБРАТЬ ДОЛОЙ
Потому что такое размещение приводит к глобальному загаживанию пространства имен с жуткими последствиями.
Таким образом, чем меньше разного рода инклюдов напихано в хидер - тем лучше. Это позволяет несколько ускорить компиляцию, так как компилятору придется меньше парсить, а также сокращает заваливание глобального пространства имен декларациями.
Например, если у вас в классе есть указатель на какой-то другой класс, не нужно тащить инклюд этого класса, достаточно сделать forward declaration.
"Понимать взаимосвязи" позволяет IDE. Там можно прекрасно посмотреть, что куда включено.