I absolutely agree.
In my experience the biggest single factor which leads to high quality, easily maintainable software is an understanding the importance of dependency relationships.
High quality software should not exhibit any dependency cycles (not just between packages, but between classes within packages too). This is a key principle and the most important difference between software 'engineering' and simply hacking out code.
For me but the crunch point came several years ago when I ran the source code for my current project through a dependency analysis tool. The code written by the senior developers on my team was 100% free of cycles - but mine was not. Consequently I had to recode everything I had written before anyone else noticed! Since then I have not looked back.
Unfortunately, most software is not well engineered when you run it through a dependency analysis tool - but then high quality software engineering seems a pretty rare thing.