I also like Steve McConnell. I like his idea of designing in greater and greater detail until you feel that implementing the design would be easier than designing in more detail. I also hold dear the belief that good software design/architecture/development is about managing complexity.
This idea relates to a fantastic insight from Juval Lowy in his WCF book.
He points out two very important things.
"…If you examine the brief history of software engineering just outlined, you notice a pattern: every new methodology and technology generation incorporates the benefits of its preceding technology and improves on the deficiencies of its preceding technology. However, every new generation also introduces new challenges. I say that MODERN SOFTWARE ENGINEERING IS THE ONGOING REFINEMENT OF THE EVER-INCREASING DEGREES OF DECOUPLING."
"…Good coupling is business-level coupling…Bad coupling is anything to do with writing plumbing."
This is important when you look at the disadvantages of too much coupling.
Juval also points out in his book the relationship between service(or component) sizes and the number of services(or components) in a system.
The integration cost is proportional to x squared and the cost per service(or component) is proportional to 1 on z squared, where x is the number of services and z is the size of each service.
So for some values of x and z the product x*z will be a minimum and this is the minimal cost.